Laravel Reverb, взаимодействие через WebSockets
Реальный опыт: как я внедрил Laravel Reverb в свои проекты
Не так давно я столкнулся с задачей — нужно было добавить живой чат поддержки в SaaS-продукт клиента. До этого я использовал Pusher и стороннюю обёртку Laravel WebSockets, но постоянно упирался в лимиты бесплатных тарифов и странные баги с переподключением. Когда Laravel выпустил собственный сервер Reverb, я решил рискнуть и мигрировать на него. Спустя год эксплуатации в продакшене могу сказать честно: это лучшее, что случилось с real-time функциями в Laravel. Делюсь полным гайдом, который прошёл проверку боем — от установки до продакшн-настроек.
Почему Reverb, а не Pusher или Socket.io
Reverb — это нативный WebSocket-сервер, написанный на PHP командой Laravel. Он полностью совместим с протоколом Pusher, что означает: можно использовать привычный Laravel Echo без переписывания фронтенда. Главные плюсы, которые я оценил на практике:
- Работает внутри вашей инфраструктуры, без внешних сервисов.
- Поддерживает горизонтальное масштабирование через Redis.
- Легко запускается и поддерживается через Supervisor или Horizon.
- Никаких лимитов на количество сообщений.
Шаг 1. Установка
Начинаем с чистого проекта Laravel:
composer create-project laravel/laravel realtime-demo
cd realtime-demo
php artisan install:broadcasting
Команда install:broadcasting — это магия. Она автоматически:
- устанавливает пакет laravel/reverb
- публикует конфиг config/reverb.php и config/broadcasting.php
- добавляет нужные переменные в .env
- устанавливает laravel-echo и pusher-js через npm
После установки проверьте .env — там должны появиться такие строки:
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-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}"
Запускаем сервер Reverb отдельной командой (в проде это делает Supervisor):
php artisan reverb:start
Если увидели Starting server on 0.0.0.0:8080 — всё работает.
Шаг 2. Живой чат — модели и миграции
Создаём таблицу сообщений, команда ниже создает модель и миграцию:
php artisan make:model Message -m
Миграция:
public function up(): void
{
Schema::create('messages', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->foreignId('chat_id')->constrained();
$table->text('body');
$table->timestamps();
});
}
Модель Message:
class Message extends Model
{
protected $fillable = ['user_id', 'chat_id', 'body'];
public function user(): BelongsTo
{
return