2017-05-19 1 views
4

ドキュメントや検索で見つけられない場合があります。私は、バックエンドのプレゼンスチャネル上にいくつの接続があるかをチェックしようとしています。Laravelブロードキャストチャンネル - 接続を確認する

私はそうのようなエコーをフロントエンドに細かい確認することができます。

Echo.join('chat') 
    .here((users) => { 
     // users.length is the proper count of connections 
    }) 

しかし、私はどこかLaravel内の同じ接続の数が、バックエンドのコードでを得ることができる方法はありますか?

+0

プッシャーを使用していますか? –

答えて

4

にあなたはプッシャーを使用している場合、バックエンドはちょうど次の操作を実行できます。

$response = $pusher->get('/channels/presence-channel-name/users'); 
if($response[ 'status'] == 200) { 
    // convert to associative array for easier consumption 
    $users = json_decode($response[ 'body' ], true)[ 'users' ]; 
} 

$userCount = count($users); 

あなたはプッシャーでそれについての詳細を読むことができます。 pusher-http-php sdkにはこれに関するドキュメントもあります。

プレゼンス・チャネル上に存在するユーザのリストが channel_nameが有効なプレゼンスチャンネル名に置き換えられ/channels/[channel_name]/usersリソースを問い合わせる によって取得することができます。

これは、プレゼンスチャネルの場合、明示的にはです。

さらに、チャネル内のユーザーを追跡するには、webhooksを使用します。

ユーザがプレゼンスチャネルから を購読または購読を停止するたびに、アプリケーションに通知します。 たとえば、サーバーとすべてのアプリケーションクライアントのチャネルプレゼンス状態を に同期させることができます。

プッシャーは、次の形式で情報を使用してサーバーをヒットします:

{ 
    "name": "member_added", // or "member_removed" 
    "channel": "presence-your_channel_name", 
    "user_id": "a_user_id" 
} 

このデータは、潜在的にデータベース内のテーブルに格納されているか、代わりのRedisである可能性があります。

1

私は考えられません。チャネルはクライアント(JSとのWebサイト)とWebSocket-Server(独自のNodeJS-ServerまたはPusher-Servers)の間にあります。ララヴェルはイベントをプッシュしているだけですが、決して引っ張ってはいません。

解決策を見つけるには、使用しているドライバ(redisまたはpusher)を知る必要があります。プッシャーサーバーに何人のユーザーがサーバーに巻き込まれているかを尋ねることはおそらく可能です。プッシャーの場合、これは面白そう

https://support.pusher.com/hc/en-us/articles/204113596-Showing-who-s-online-with-a-large-number-of-usershttps://pusher.com/docs/rest_api#method-get-channels

Redisのためにあなたは、チャンネルに耳を傾け、laravelする要求を発射するNodeJSサーバ内のいくつかのロジックを実装することができます。

依存しないように最善の解決策は、データベース内のカウンタを更新するために、各クライアントからの要求を発射することです:

Echo.join('chat') 
.here((users) => { 
    //request to laravel api with users.length 
}) 

この方法の欠点は、それが唯一の値を更新することを、あるときにユーザーが接続しますチャンネル

0

または応答

{ "USER_ID" としてこれかもしれない: "a_user_id" "名前": "member_added"、//または "member_removed" "チャンネル": "プレゼンスyour_channel_name"、 }

関連する問題