مقاله

Pusher، Laravel Reverb، Echo سمت کلاینت و channelهای private — نوتیفیکیشن لحظه‌ای بدون polling.

Broadcasting در Laravel — WebSocket، Echo و اعلان real-time

Broadcasting در Laravel — WebSocket، Echo و اعلان real-time

صفحه admin هر ۵ ثانیه refresh می‌شود تا سفارش جدید ببیند — راه حل ضعیف. Broadcasting یعنی سرور وقتی Event رخ داد به کلاینت‌های subscribed push کند. Laravel با Reverb (خودمیزبان)، Pusher یا Ably کار می‌کند.

مفاهیم

  • Event implements ShouldBroadcast
  • Channel public، private، presence
  • Laravel Echo — JS client
  • WebSocket server — Reverb یا Pusher

Event broadcast

class OrderPlaced implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function __construct(public Order $order) {}

    public function broadcastOn(): array
    {
        return [new PrivateChannel('orders.'.$this->order->user_id)];
    }

    public function broadcastAs(): string
    {
        return 'order.placed';
    }
}

تنظیم .env

BROADCAST_CONNECTION=reverb
# یا pusher

REVERB_APP_ID=...
REVERB_APP_KEY=...
REVERB_APP_SECRET=...
php artisan install:broadcasting
php artisan reverb:start

مجوز channel

// routes/channels.php
Broadcast::channel('orders.{userId}', fn (User $user, int $userId) => (int) $user->id === $userId);

Authorization برای private channel.

Echo در frontend

Echo.private(`orders.${userId}`)
    .listen('.order.placed', (e) => {
        console.log(e.order);
    });

با Vite و asset pipeline.

Queue و broadcast

ShouldBroadcast معمولاً queued است — Queue worker باید روشن باشد.

کی broadcast کنیم؟

چت، نوتیف admin، progress upload، dashboard live — نه هر CRUD ساده.

جمع‌بندی

Event + Broadcast + Echo = real-time. Auth: Sanctum برای API جدا. تست سخت‌تر — integration manual.

پنل real-time