Reverb - власний WebSocket-сервер Laravel, написаний на PHP. Він замінює сторонні сервіси на кшталт Pusher чи Ably: замість платити за кількість з'єднань і повідомлень, ви запускаєте сервер на своїй інфраструктурі.
Reverb реалізує протокол Pusher, тому фронтенд працює зі звичним Laravel Echo і клієнтом pusher-js, а перехід з Pusher на Reverb (чи назад) - це зміна змінних оточення.
Встановлення:
php artisan install:broadcasting --reverb
Команда встановлює пакети Composer і NPM, публікує конфігурацію, створює routes/channels.php і додає в .env ключі:
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=...
REVERB_APP_KEY=...
REVERB_APP_SECRET=...
REVERB_HOST=localhost
REVERB_PORT=8080
Запуск сервера:
php artisan reverb:start
php artisan reverb:start --debug # показувати вхідні й вихідні повідомлення
Подія для трансляції:
class OrderShipped implements ShouldBroadcast
{
public function __construct(public Order $order) {}
public function broadcastOn(): array
{
return [new PrivateChannel('orders.' . $this->order->user_id)];
}
}
Прослуховування на фронтенді:
Echo.private(`orders.${userId}`).listen('OrderShipped', (e) => {
console.log(e.order);
});
Що важливо пам'ятати:
ShouldBroadcastвідправляє подію через чергу - без запущеного воркера повідомлення не надходять.ShouldBroadcastNow- одразу, без черги;REVERB_SERVER_HOST/REVERB_SERVER_PORT- де слухає сам сервер, аREVERB_HOST/REVERB_PORT- куди Laravel надсилає повідомлення. На продакшені Reverb зазвичай слухає0.0.0.0:8080, а назовні доступний через Nginx на443;- Reverb - довгоживучий процес: після деплою його треба перезапустити (
reverb:restart), а на сервері тримати під Supervisor.