Laravel Broadcasting: tự chạy Reverb hay dùng dịch vụ WebSocket lưu trữ sẵn?
Bài này được viết lại từ bài trên blog Hibira. Bài viết của đội ngũ phát triển và vận hành Hibira, một dịch vụ WebSocket tương thích giao thức Pusher.
Với Laravel Broadcasting, bạn có hai cách tốt để đẩy sự kiện tới trình duyệt: tự chạy Laravel Reverb (máy chủ WebSocket chính thức từ Laravel 11), hoặc trỏ driver pusher tới một dịch vụ lưu trữ sẵn. Cả hai đều dùng giao thức Pusher, đều chạy với Laravel Echo và pusher-js, và routes/channels.php của bạn không đổi.
Nên câu hỏi thật sự không phải "code hỗ trợ cái nào", mà là ai vận hành máy chủ WebSocket.
Tự chạy Reverb: cần những gì
Trên máy local chỉ cần:
php artisan install:broadcasting
php artisan reverb:start
Lên production thì cần thêm:
- Trình quản lý tiến trình (Supervisor/systemd) để Reverb luôn chạy và khởi động lại khi deploy.
- TLS và proxy: trình duyệt cần
wss://, nên Reverb thường đứng sau Nginx hoặc load balancer. - Giới hạn máy chủ: mỗi kết nối là một file đang mở; vượt khoảng một nghìn kết nối thì tài liệu Reverb khuyên dùng event loop
ext-uv. - Mở rộng ngang: từ hai máy chủ trở lên phải bật cơ chế scaling qua Redis và đặt load balancer phía trước.
- Giám sát: Reverb báo cáo cho Laravel Pulse, nhưng bạn vẫn cần cảnh báo khi tiến trình chết hoặc kết nối tăng đột biến.
Nếu team đã quen vận hành server thì đây chỉ là thêm một daemon.
Dùng dịch vụ lưu trữ sẵn: cần những gì
Chỉ cần sửa .env và giữ driver pusher:
BROADCAST_CONNECTION=pusher
PUSHER_APP_ID=your-app-id
PUSHER_APP_KEY=your-app-key
PUSHER_APP_SECRET=your-app-secret
PUSHER_HOST=ws.hibira.io
PUSHER_PORT=443
PUSHER_SCHEME=https
Không có tiến trình phải giữ, không có chứng chỉ phải gia hạn. Đổi lại là phí hàng tháng khi vượt gói miễn phí, sự kiện đi qua bên thứ ba, và giới hạn của gói.
So sánh nhanh
| Reverb tự vận hành | Dịch vụ lưu trữ sẵn | |
|---|---|---|
| Chi phí | Máy chủ + thời gian của bạn | Gói miễn phí, sau đó trả theo tháng |
| Thiết lập | Process manager, TLS, proxy, giới hạn | Vài giá trị trong .env |
| Mở rộng | Redis + load balancer | Việc của nhà cung cấp |
| Dữ liệu | Ở trong hạ tầng của bạn | Đi qua nhà cung cấp |
| Chuyển đổi | Bạn tự vận hành hạ tầng | SDK tương thích giúp chuyển dễ hơn; tính năng và giới hạn có thể khác nhau |
Chọn thế nào
Chọn Reverb khi: bạn đã có Supervisor và giám sát; sự kiện không được rời khỏi hạ tầng của mình; lưu lượng vừa phải và người dùng ở gần máy chủ.
Chọn dịch vụ lưu trữ sẵn khi: bạn deploy lên nơi khó chạy tiến trình dài (serverless, một số gói PaaS); không ai muốn bị gọi dậy lúc nửa đêm vì WebSocket; người dùng ở xa máy chủ của bạn (một máy chủ WebSocket gần người dùng rút ngắn mọi sự kiện, dù app vẫn ở chỗ cũ); hoặc bạn cần thêm debug console, thống kê theo app, webhook, thông báo đẩy.
Đổi ý sau cũng được
Vì cùng giao thức, phần lớn việc chuyển đổi là cấu hình. Từ Reverb sang dịch vụ lưu trữ: đổi BROADCAST_CONNECTION sang pusher, đặt các giá trị PUSHER_*, và đổi broadcaster của Echo từ 'reverb' sang 'pusher' với cùng tuỳ chọn host. Chiều ngược lại cũng vậy. Dù vậy, cùng giao thức không có nghĩa là mọi nhà cung cấp giống hệt nhau: hãy kiểm tra phiên bản Laravel, cấu hình Echo, các loại kênh (kể cả encrypted), client event, webhook và giới hạn kích thước tin nhắn trước khi chuyển. Nhiều team bắt đầu bằng dịch vụ lưu trữ để ra mắt nhanh rồi chuyển sang Reverb khi lưu lượng đã ổn định, hoặc ngược lại.
Về Hibira
Hibira là dịch vụ WebSocket tương thích giao thức Pusher Channels do đội ngũ chúng tôi phát triển và vận hành, hiện chạy ở Hồng Kông (AWS ap-east-1). Giới hạn vật lý của một vòng đi về từ Hồng Kông tới Hà Nội khoảng 9 ms, tới TP. Hồ Chí Minh khoảng 15 ms (thực tế sẽ chậm hơn). Với Laravel, gói composer require hibira-io/laravel cùng lệnh php artisan hibira:install sẽ cấu hình sẵn .env và Echo cho bạn.
Gói Free không cần thẻ: 100 kết nối đồng thời, 200.000 tin nhắn mỗi ngày, 1 app, 200 kênh đồng thời, tin nhắn tối đa 4 KB, 2 triệu lượt gửi mỗi tháng, 2.000 thiết bị đăng ký push; chỉ tính tin nhắn được publish. Các gói trả phí tính bằng đô la Mỹ theo tháng: Hobby $19, Starter $39, Pro $89, Advanced $169, Business $279, Scale $699.
Nếu bạn gặp vướng mắc hoặc cần tính năng nào, hãy để lại bình luận, đội ngũ chúng tôi sẽ phản hồi.
All rights reserved