Realtime-функции — живые уведомления, чат, список онлайн-пользователей — в Laravel строятся на broadcasting. В Laravel 12 официальный WebSocket-сервер — Reverb, а в браузере используется Laravel Echo.

Архитектура: событие → Reverb → Echo

PHP-код создаёт событие, оно проходит через очередь в Reverb, а Reverb рассылает его подписанным браузерам. Сам PHP WebSocket-соединение не держит.

Путь события из Laravel в браузер
Путь события из Laravel в браузер

Установка

Одна команда ставит всё: пакет Reverb, config/broadcasting.php, routes/channels.php и JavaScript-часть.

bash
php artisan install:broadcasting
php artisan reverb:start --debug
php artisan queue:listen
npm run dev

Основные значения в .env:

bash
BROADCAST_CONNECTION=reverb

REVERB_APP_ID=local-app
REVERB_APP_KEY=local-key
REVERB_APP_SECRET=local-secret
REVERB_HOST="localhost"
REVERB_PORT=8080
REVERB_SCHEME=http

VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST="${REVERB_HOST}"
VITE_REVERB_PORT="${REVERB_PORT}"
VITE_REVERB_SCHEME="${REVERB_SCHEME}"

💡 Флаг --debug показывает в терминале каждое соединение и сообщение — удобно при разработке.

Пишем broadcast-событие

Событие реализует интерфейс ShouldBroadcast и возвращает канал в broadcastOn(). broadcastAs() и broadcastWith() необязательны: они задают имя и отправляемые данные.

php
<?php

namespace App\Events;