本頁專注於 Reverb 伺服器本身的安裝與運行。
關於 broadcast 事件的建立與 Laravel Echo 的使用方式,請參閱 Broadcasting。
什麼是 Reverb
Laravel Reverb 是 Laravel 官方提供的自我託管 WebSocket 伺服器。 可在不依賴外部服務的情況下,為 Laravel 應用程式加入高速且可擴展的即時通訊。 Reverb 運行於 broadcasting 之上,負責將伺服器端事件透過 WebSocket 送達瀏覽器。安裝
使用install:broadcasting Artisan 指令,可一次安裝 Reverb 與所有相依。
--reverb 選項執行,即可自動安裝 Reverb。
- 安裝 Composer 套件(
laravel/reverb) - 安裝 NPM 套件(
laravel-echo、pusher-js) - 於
.env加入環境變數 - 產生
config/reverb.php
reverb:install。
設定
應用程式認證資訊
以環境變數設定用戶端與伺服器建立連線時所用的認證資訊。config/reverb.php 的 apps 區段中被參照。
允許的來源(Allowed Origins)
可透過config/reverb.php 的 allowed_origins 限制允許哪些來源提出用戶端請求。
*。
多應用支援
一台 Reverb 伺服器可支援多個應用程式。 在config/reverb.php 的 apps 陣列加入多個項目。
SSL 設定
正式環境中,通常由 Nginx 等 Web 伺服器負責 SSL 終端,並將請求 proxy 至 Reverb。 若想在本機開發環境使用 Secure WebSocket(wss://),可利用 Laravel Herd 或 Valet 的憑證。
config/reverb.php 設定 tls 選項。
啟動伺服器
以reverb:start Artisan 指令啟動伺服器。
0.0.0.0:8080 啟動。
可用 --host / --port 選項指定自訂位址。
REVERB_SERVER_HOST / REVERB_SERVER_PORT 為伺服器本身的監聽位址。
REVERB_HOST / REVERB_PORT 為 Laravel 應用送出 broadcast 訊息時的目的地。
正式環境中兩者可能不同。Debug 模式
為了效能,Reverb 預設不輸出除錯資訊。 若要觀察連線或訊息流程,可使用--debug 選項。
重啟伺服器
Reverb 是常駐 process,要反映程式碼變更需重啟。reverb:restart 指令會 graceful 結束所有連線後停止伺服器。
監控
Reverb 支援與 Laravel Pulse 整合。 可將連線數與訊息數即時顯示於儀表板。 首先在config/pulse.php 加入 Reverb 的 recorder。
pulse:check daemon。
若為橫向擴展架構,pulse:check 只在一台伺服器執行。
在正式環境運行
檔案開啟上限
一個 WebSocket 連線會消耗一個 file descriptor。 請確認 OS 層級的限制,並視需要提高上限。/etc/security/limits.conf 變更上限。
Event Loop(ext-uv)
Reverb 預設使用 PHP 的stream_select,此方法有最多 1,024 個檔案的限制。
若要處理 1,000 個以上的同時連線,可安裝 ext-uv 解除限制。
ext-uv 可用時,Reverb 會自動改用它。
Nginx 反向代理
正式環境不直接曝露 Reverb,而是透過 Nginx 等 Web 伺服器代理。 以下為 Nginx 的設定範例。nginx.conf 的 worker_rlimit_nofile 與 worker_connections。
Process 管理(Supervisor)
正式環境中以 Supervisor 管理 Reverb process。 設定supervisor.conf 的 minfds 以確保所需的 file descriptor。
擴展(Redis)
當單一伺服器無法處理所需的連線數時,可利用 Redis 的 pub/sub 功能進行橫向擴展。 於.env 啟用擴展。
Laravel Cloud 提供不需管理基礎架構就能部署 Reverb 應用的
fully managed WebSocket 基礎架構。
事件
Reverb 在連線與訊息的生命週期中會發出以下事件。 可透過 事件監聽器 接收並加入自訂處理。
這些事件皆位於
Laravel\Reverb\Events 命名空間。
後續步驟
Broadcasting
確認 broadcast 事件的建立、channel 授權與 Laravel Echo 的設定方式
事件與 Listener
學習用來接收 Reverb 所發出事件的 Laravel 事件系統