我在文档或搜索中找不到这个,也许有人有一些提示。我正在尝试检查后端的存在通道上有多少连接。
我可以使用 Echo 在前端进行检查,如下所示:
Echo.join('chat')
.here((users) => {
// users.length is the proper count of connections
})
但是有没有办法我可以获得相同数量的连接,但在 Laravel 的某个后端代码中?
我在文档或搜索中找不到这个,也许有人有一些提示。我正在尝试检查后端的存在通道上有多少连接。
我可以使用 Echo 在前端进行检查,如下所示:
Echo.join('chat')
.here((users) => {
// users.length is the proper count of connections
})
但是有没有办法我可以获得相同数量的连接,但在 Laravel 的某个后端代码中?
如果您使用的是 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);
您可以在 pusher文档中阅读有关它的更多信息。pusher-http-php sdk 也有一些文档。
可以通过查询替换为有效存在通道名称的
/channels/[channel_name]/users
资源 来检索存在通道上的用户列表。channel_name
这明确地仅适用于存在渠道。
此外,您可以通过webhook跟踪频道中的用户。
每当用户订阅或取消订阅 Presence 频道时,通知您的应用程序。例如,这允许您在服务器以及所有应用程序客户端上同步通道状态。
Pusher 将使用以下形式的信息访问您的服务器:
{
"name": "member_added", // or "member_removed"
"channel": "presence-your_channel_name",
"user_id": "a_user_id"
}
这些数据可能存储在数据库中的表中,或者存储在 redis 中。
我不认为这是可能的。通道位于客户端(带有 JS 的网站)和 WebSocket-Server(自己的 NodeJS-Server 或 Pusher-Servers)之间。Laravel 只是将事件推送给他们,但从不拉动。
要找到解决方案,我们必须知道您使用的是哪个驱动程序(redis 或 pusher)。可以用 curl 询问推送服务器有多少用户在服务器上。
对于推送者,这看起来很有趣: https: //support.pusher.com/hc/en-us/articles/204113596-Showing-who-s-online-with-a-large-number-of-users和https:// pusher.com/docs/rest_api#method-get-channels
对于 Redis,您可以在 NodeJS 服务器内部实现一些逻辑来监听频道并向 laravel 发出请求。
独立的最佳解决方案是从每个客户端发出请求以更新数据库中的计数器:
Echo.join('chat')
.here((users) => {
//request to laravel api with users.length
})
这种方法的缺点是,它只在用户连接到频道时更新值
或者可能是这个作为回应
{ "user_id": "a_user_id" "name": "member_added", // 或 "member_removed" "channel": "presence-your_channel_name", }