跳转到主要内容

什么是广播

WebSocket 让服务器可以实时向客户端推送数据。 Laravel 的广播用于把服务端事件通过 WebSocket 送达前端 JavaScript。 例如订单状态发生变化时,浏览器无需刷新即可立即看到更新。 Laravel 广播的优势在于:服务器端的事件名与数据可以直接分享给客户端。
广播基于 Laravel 事件系统。建议先了解事件与监听器的基础。

配置

新项目默认关闭广播。用 install:broadcasting 启用:
命令会提示你选择要使用的广播服务,并生成 config/broadcasting.phproutes/channels.php

Laravel Reverb

Laravel 11 及以后推荐使用官方 WebSocket 服务器 Laravel Reverb。 Reverb 支持自托管,无需外部服务即可实现实时通信。

安装

install:broadcasting--reverb 可一次完成 Composer / NPM 依赖安装与 .env 配置:
手动安装:

.env 主要配置

启动 Reverb 服务器

生产环境请使用 Supervisor 等进程管理工具以守护方式运行。
广播事件通过队列处理,除 Reverb 外还需启动队列 worker:

创建广播事件

生成事件类

给事件类实现 ShouldBroadcast 接口:
只要实现 ShouldBroadcast,事件触发时就会自动通过队列广播。

自定义广播数据

默认所有 public 属性都会成为广播 payload。若需精简数据,定义 broadcastWith

自定义广播名称

默认使用类名作为事件名。可用 broadcastAs 自定义:
前端监听时使用 . 前缀以关闭 Laravel 命名空间前缀:

频道类型

广播到多个频道用数组返回:

频道授权

Private 与 Presence 频道在订阅前会在服务器端进行授权。

routes/channels.php

install:broadcasting 生成的 routes/channels.php 中定义授权回调:
回调第一个参数是当前用户,之后是频道名中的通配符。 返回 true 或 truthy 值表示授权通过,false 则拒绝。
也可使用路由模型绑定。将频道名写为 orders.{order},回调会得到 Order 实例。

使用频道类做授权

频道多时可用频道类组织:
routes/channels.php 中注册:

触发事件

ShouldBroadcast 事件与普通事件的触发方式相同:
只广播给他人(排除自己):
使用 toOthers 需要事件类 use InteractsWithSockets trait。

前端接收

配置 Laravel Echo

若使用 Reverb,在 resources/js/bootstrap.js 中设置 Echo:

监听事件

使用 React / Vue Hook

若使用官方 React / Vue 启动套件,可用专用 hook:
useEcho 会在组件卸载时自动离开频道。
前端构建前请确认 .env 中的 VITE_REVERB_* 已正确设置。

实战示例:订单状态实时更新

1

启用广播

启动 Reverb 服务器与队列 worker:
2

创建事件类

编辑 app/Events/OrderShipmentStatusUpdated.php
3

定义频道授权

4

触发事件

5

前端监听

下一步

Laravel Reverb

查看 Reverb 服务器的部署、生产运维与扩展详情。

队列与任务

广播依赖队列处理。了解队列的配置与运维。

事件与监听器

学习作为广播基础的 Laravel 事件系统。
最后修改于 2026年7月18日