Laravel广播频道 - 检查连接

时间:2017-05-19 18:55:32

标签: php laravel broadcast laravel-echo

我无法在文档中找到这些内容或通过搜索,也许某人有一些提示。我试图检查后端的状态通道上有多少连接。

我可以像Echo那样在前端检查正常:

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

但有没有办法可以获得相同数量的连接,但是在Laravel内部的后端代码中?

3 个答案:

答案 0 :(得分:5)

如果您使用Pusher,后端可以执行以下操作:

$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);

您可以在推杆documentation中阅读更多相关信息。 pusher-http-php sdk也有一些文档。

  

可以检索在线信道上存在的用户列表   查询/channels/[channel_name]/users资源所在的位置   channel_name将替换为有效的状态通道名称。

对于状态通道,这只是

此外,您可以通过webhooks跟踪频道中的用户。

  

每当用户订阅或取消订阅时通知您的应用程序   来自Presence频道。   例如,这允许您同步通道状态   您的服务器以及所有应用程序客户端。

Pusher将使用以下格式的信息点击您的服务器:

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

此数据可能存储在数据库的表格中,也可能存储在redis中。

答案 1 :(得分:1)

我认为不可能。通道位于客户端(带有JS的网站)和WebSocket-Server(自己的NodeJS-Server或Pusher-Servers)之间。 Laravel只是向他们推动事件,但从不拉动。

要找到解决方案,我们必须知道您使用的是哪种驱动程序(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,您可以在NodeJS服务器中实现一些逻辑来监听频道并向laravel发出请求。

独立的最佳解决方案是从每个客户端发出请求以更新数据库中的计数器:

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

此方法的缺点是,它仅在用户连接到频道时更新值

答案 2 :(得分:0)

或者可以将此作为回应

{   “user_id”:“a_user_id”   “name”:“member_added”,//或“member_removed”   “channel”:“presence-your_channel_name”,  }