Получение события на стороне сервера, как только пользователь присоединился к широковещательному каналу с Redis в Laravel

#php #laravel #redis #broadcast-channel

#php #laravel #redis #широковещательный канал

Вопрос:

Я пытаюсь понять, как перехватить серверную часть события, как только пользователь присоединился к каналу. Я имею в виду сразу после того, как аутентификация была выполнена для частного канала или канала присутствия.

Например, после этого:

 Broadcast::channel('chat.{roomId}', function ($user, $roomId) {
    if ($user->canJoinRoom($roomId)) {
        return ['id' => $user->id, 'name' => $user->name];
    }
});
  

успешно продолжается, я ожидаю, что у меня будет возможность перехватить событие, чтобы узнать, что пользователь присоединился к каналу (не только на стороне интерфейса).

Есть какие-либо подсказки о том, как с этим справиться?

Ссылка:https://laravel.com/docs/6.x/broadcasting#joining-presence-channels

Ответ №1:

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

 axios.post('/channel/join')
     .then(res => res.data)
     .then(data => console.log);
  

На серверной части у вас может быть маршрут в (например) routes/web.php :

 Route::post('/channel/join', 'ChannelController@joined');
  

Затем в ChannelController.php вы можете обработать действие и делать то, что вы хотите:

 public function joined(Request $request)
{
    $user = auth()->user();

    broadcast(new UserJoinedChannel($user))->toOthers();

    return ['status' => 'Channel joined successfully!'];
}
  

Комментарии:

1. Мы наконец нашли решение, используя события pusher: pusher.com/docs/channels/using_channels/events