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.