Я не могу найти это в документах или поиске, может быть, у кого-то есть какие-то советы. Я пытаюсь проверить, сколько подключений находится на канале присутствия на сервере.
Я могу проверить нормально на интерфейс с 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);
Вы можете прочитать больше об этом в толкаче документация. Толкатель-клиент-PHP SDK также имеет некоторую документацию для этого.
Список пользователей, присутствующих на канале присутствия, может быть получен
запрашивая/channels/[channel_name]/users
ресурс, где
channel_name
заменяется действительным именем канала присутствия.
Это явно только для каналов присутствия.
Кроме того, вы можете отслеживать пользователей в каналах через webhooks.
Уведомлять ваше приложение, когда пользователь подписывается или отписывается
из канала присутствия.
Например, это позволяет синхронизировать состояние присутствия канала на
ваш сервер, а также все ваши клиенты приложений.
Pusher попадет на ваш сервер с информацией в следующей форме:
{
"name": "member_added", // or "member_removed""channel": "presence-your_channel_name",
"user_id": "a_user_id"}
Эти данные могут потенциально храниться в таблице в вашей базе данных или, альтернативно, в Redis.
Я не думаю, что это возможно. Каналы находятся между клиентом (веб-сайт с JS) и WebSocket-сервером (собственным NodeJS-сервером или Pusher-серверами). Ларавел просто толкает события к ним, но никогда не тянет.
Чтобы найти решение, мы должны знать, какой драйвер вы используете (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»: «sence-your_channel_name «,
}