Ứng Dụng Real-Time Với Laravel Reverb

· 2 min read

Trong nhiều năm, các lập trình viên Laravel dựa vào Pusher (đắt đỏ) hoặc Laravel Echo Server / Soketi (cần Node.js) cho WebSockets.

Laravel 11 giới thiệu Reverb, một WebSocket server được viết trực tiếp bằng PHP (sử dụng Event Loop). Nó cho phép bạn xây dựng các ứng dụng real-time mà không cần rời khỏi hệ sinh thái PHP.

Cài Đặt

php artisan install:broadcasting

Lệnh này hỏi bạn có muốn cài đặt Reverb không. Chọn "Yes".

Nó cài đặt package, publish cấu hình, và khởi động Reverb server.

Cách Hoạt Động

  1. Backend Event: Bạn fire một event trong PHP.
    MessageSent::dispatch($message);
    
  2. Broadcasting: Nếu event implement ShouldBroadcast, Laravel đẩy nó tới Reverb server (qua Redis hoặc kết nối trực tiếp).
  3. Client (Laravel Echo): Frontend đang lắng nghe một channel và nhận JSON payload ngay lập tức.

Event

use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class MessageSent implements ShouldBroadcast
{
    public function __construct(public Message $message) {}

    public function broadcastOn()
    {
        return new PrivateChannel('chat.' . $this->message->room_id);
    }
}

Frontend (Laravel Echo)

Đảm bảo bạn đã cài đặt laravel-echopusher-js (Reverb sử dụng Pusher protocol).

Echo.private(`chat.${roomId}`)
    .listen('MessageSent', (e) => {
        console.log(e.message);
        messages.value.push(e.message);
    });

Khả Năng Mở Rộng

Reverb cực kỳ nhanh. Một server đơn có thể xử lý hàng nghìn kết nối đồng thời. Để mở rộng theo chiều ngang, Reverb sử dụng Redis Pub/Sub để đồng bộ hóa nhiều servers.

Các Trường Hợp Sử Dụng

  • Ứng dụng chat
  • Trung tâm thông báo
  • Metrics dashboard real-time
  • Chỉ báo "Người dùng đang gõ..."
  • Triển khai multiplayer

Real-time không còn "khó" trong PHP nữa. Nó là native.

Bình luận