Получите событие на стороне сервера, когда пользователь присоединился к широковещательному каналу с Redis в Laravel
Я пытаюсь понять, как поймать серверную часть события после того, как пользователь присоединился к каналу. Я имею в виду сразу после аутентификации для частного канала или канала присутствия.
Например, после этого:
Broadcast::channel('chat.{roomId}', function ($user, $roomId) {
if ($user->canJoinRoom($roomId)) {
return ['id' => $user->id, 'name' => $user->name];
}
});
успешно продолжается, я бы ожидал, что у меня будет возможность поймать событие, чтобы узнать, что пользователь присоединился к каналу (не только на стороне внешнего интерфейса).
Любой намек на то, как с этим справиться?
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!'];
}