#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