Laravel Broadcast Channels — проверить соединения

Я не могу найти это в документах или поиске, может быть, у кого-то есть какие-то советы. Я пытаюсь проверить, сколько подключений находится на канале присутствия на сервере.

Я могу проверить нормально на интерфейс с Echo следующим образом:

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

Но есть ли способ, которым я могу получить такое же количество соединений, но в коде бэкэнда где-то в Laravel?

4

Решение

Если вы используете 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.

4

Другие решения

Я не думаю, что это возможно. Каналы находятся между клиентом (веб-сайт с 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
})

Недостатком этого метода является то, что он обновляет значение только тогда, когда пользователь подключается к каналу.

1

Или это может быть как ответ

{
«user_id»: «a_user_id» «name»: «member_added», // или «member_removed» «channel»: «sence-your_channel_name «,
}

0
По вопросам рекламы [email protected]