廣播是什麼
透過 WebSocket,伺服器可以將資料即時傳送給客戶端。 Laravel 的廣播機制會將伺服器端的事件透過 WebSocket 傳送到前端的 JavaScript。 例如,當訂單狀態改變時,即使不重新載入頁面也能立即在瀏覽器上顯示更新。 Laravel 廣播的強項在於伺服器端的事件名稱與資料,可以原封不動地共享給客戶端。廣播是建立在 Laravel 的事件系統之上的。
建議先理解事件與監聽器的基本概念。
設定
在新的 Laravel 應用程式中,廣播預設為停用。 請使用install:broadcasting Artisan 指令啟用。
config/broadcasting.php 與 routes/channels.php。
Laravel Reverb
在 Laravel 11 以後,推薦使用官方的 WebSocket 伺服器 Laravel Reverb。 Reverb 屬於自架方案,無須額外的外部服務就能實現即時通訊。安裝
在install:broadcasting 指令加上 --reverb 選項,即可一次完成 Reverb 所需 Composer 套件與 NPM 套件的安裝,以及 .env 設定。
.env 的主要設定值
啟動 Reverb 伺服器
建立廣播事件
產生事件類別
ShouldBroadcast 介面。
ShouldBroadcast,事件被觸發時就會自動透過佇列進行廣播。
自訂廣播資料
預設情況下,事件類別的所有public 屬性都會包含在廣播的 payload 中。
若要限縮傳送的資料,請定義 broadcastWith 方法。
自訂廣播名稱
預設情況下,類別名稱即為事件名稱。 可透過broadcastAs 方法指定自訂名稱。
. 以停用應用程式的命名空間前綴。
頻道類型
頻道授權
Private 頻道與 Presence 頻道會在訂閱前於伺服器端進行授權檢查。routes/channels.php
透過install:broadcasting 指令產生的 routes/channels.php 中定義授權 callback。
true 或 truthy 值代表授權成功,回傳 false 則會被拒絕。
也可以使用路由模型繫結。
若將頻道名稱設為
orders.{order},則會傳入 Order 模型實例。透過頻道類別進行授權
當頻道變多時,可透過頻道類別加以整理。routes/channels.php 中註冊。
觸發事件
實作了ShouldBroadcast 的事件與一般事件的觸發方式相同。
toOthers。
前端接收
設定 Laravel Echo
使用 Reverb 時,請在resources/js/bootstrap.js 中設定 Echo 實例。
監聽事件
使用 React / Vue Hook
若你使用 React 或 Vue 的入門套件,可以透過專屬 Hook 讓程式更精簡。useEcho Hook 會在元件卸載時自動退出頻道。
實戰範例:訂單狀態即時更新
1
啟用廣播
2
建立事件類別
app/Events/OrderShipmentStatusUpdated.php。3
定義頻道授權
在
routes/channels.php 加入授權邏輯。4
觸發事件
在更新訂單狀態的控制器或 Job 中觸發事件。
5
前端進行監聽
在 Blade 樣板中使用內嵌 script,或於 React / Vue 元件中接收。
下一步
Laravel Reverb
進一步了解 Reverb 伺服器的設定、正式環境維運與擴展。
佇列與工作
廣播是透過佇列處理的,請確認佇列的設定與運行方式。
事件與監聽器
進一步學習作為廣播基礎的 Laravel 事件系統。