Realtime-функции — живые уведомления, чат, список онлайн-пользователей — в Laravel строятся на broadcasting. В Laravel 12 официальный WebSocket-сервер — Reverb, а в браузере используется Laravel Echo.
Архитектура: событие → Reverb → Echo
PHP-код создаёт событие, оно проходит через очередь в Reverb, а Reverb рассылает его подписанным браузерам. Сам PHP WebSocket-соединение не держит.
Установка
Одна команда ставит всё: пакет Reverb, config/broadcasting.php, routes/channels.php и JavaScript-часть.
php artisan install:broadcasting
php artisan reverb:start --debug
php artisan queue:listen
npm run devОсновные значения в .env:
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
namespace App\Events;