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

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

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

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

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!'];
}
Другие вопросы по тегам