Laravel Reverb / Echo
Работал с Laravel Reverb и Laravel Echo как со связкой для пользовательских real-time сценариев внутри Laravel-приложения.
WebSocket позволяет встроить события реального времени в прикладной flow: фоновые задачи, обновление пользовательского состояния, уведомление о завершении операции, синхронизацию UI без постоянного polling.
Что использовал на практике
Laravel Reverbкак self-hosted broadcasting server;Laravel Echoна frontend для подписки на каналы и обработки событий;- private user-scoped каналы;
- серверную авторизацию подписок;
ShouldBroadcastNowсобытия для немедленной доставки;- явные имена событий через
broadcastAs(); - отдельные subscriber-классы на клиенте;
- проксирование WebSocket-трафика через
Nginx; - интеграцию realtime-событий с очередями и background jobs.
Backend-часть
В рабочих проектах настраивал broadcasting через Reverb как основной драйвер.
Базовая схема настройки:
- конфигурация broadcasting с
reverb-connection; - отдельная конфигурация
config/reverb.php; - выделенный
reverbсервис вdocker-compose.yml; - набор broadcast events в
app/Events/*.
Каналы и авторизация
Использовал private-каналы с привязкой к конкретному пользователю.
На практике это реализовывалось через каналы вида:
users.{userId}.exports;users.{userId}.profile-changed;users.{userId}.saved-recipes.
Авторизация подписки вынесена в отдельный channel authorizer, который проверяет, что пользователь может слушать только свои каналы.
Такой подход даёт:
- изоляцию пользовательских событий;
- предсказуемый channel naming;
- более безопасную delivery-модель для персональных данных и статусов операций.
Broadcast events
Проектировал прикладные broadcast events для поддержания актуального состояния UI-клиента.
Примеры событий:
- готовность PDF-экспорта;
- изменение пользовательского профиля;
- изменение сохранённых пользовательских сущностей.
Схема реализации:
- использовать private channels для user-specific payload;
- задать явное имя события через
broadcastAs(); - передать минимально необходимый payload;
- связать событие с конкретным пользовательским сценарием в UI.
Echo на frontend
Laravel Echo использовал как отдельный клиентский слой.
Реализация в коде:
- отдельная фабрика для создания Echo instance;
- конфигурация через окружение и runtime-значения;
- выделенные subscriber-классы под разные каналы;
- раздельная обработка событий для export flow, profile updates и других пользовательских сценариев.
Такой подход удобен тем, что realtime-логика не размазывается по всему frontend-коду.
Reverb / Echo и фоновые задачи
Использовал связку очередей и realtime-доставки результата.
Пример асинхронного сценария PDF-экспорта:
- клиент инициирует операцию по HTTP;
- backend создаёт export job;
- задача обрабатывается в очереди;
- после завершения backend отправляет broadcast event;
- frontend через
Echoполучает событие и завершает пользовательский flow.
Это хороший пример паттерна для длинных операций, где постоянный polling либо избыточен, либо ухудшает UX.
Инфраструктура и доставка
Realtime-слой разворачивается как отдельный процесс в Docker-инфраструктуре.
На практике использовал:
- отдельный контейнер
reverb; - проксирование пути
/appчерезNginx; - разделение PHP runtime, queue worker и realtime server по сервисам;
- выделенной клиентской конфигурацией для подключения из браузера.
Что считаю важным в этом стеке
На практике считаю важными такие вещи:
- realtime должен быть связан с конкретным пользовательским сценарием;
- private channels и авторизация обязательны для персональных событий;
- naming каналов и событий должен быть стабильным;
- frontend-подписки лучше держать в явном subscriber-слое;
ReverbиEchoособенно хорошо работают в связке с очередями и async workflows.