Laravel Reverb 是 Laravel 官方的一手 WebSocket 服务器,用于实现实时 WebSocket 通信。本文档面向在 Laravel 应用中添加实时更新、聊天、通知或在线状态功能的场景。
用途
Reverb 用于为 Laravel 应用提供实时通信能力,典型触发场景包括:添加实时更新、聊天、通知或在线状态(presence)功能。
资料中的决策指南给出了常见需求对应的方案:实时通知使用 Reverb + 私有频道;聊天/消息使用 Reverb + presence 频道;实时仪表盘使用 Reverb + 公共频道;协作编辑使用 Reverb + whisper;后台任务则不适合用 Reverb,应使用队列(Queues)。
主要组件
- Reverb Server:Laravel 官方的一手 WebSocket 服务器。
- Broadcasting:将事件从服务器发送到客户端。
- Channels:提供公共、私有、presence 三种作用域。
- Echo:客户端事件监听器。
工作流程(资料标注为强制)
在任何实现之前,需要并行启动 3 个 agent,每个 Agent 调用带一个名称:
- fuse-ai-pilot:explore-codebase —— 分析现有广播模式
- fuse-ai-pilot:research-expert —— 通过 Context7 验证 Reverb 文档
- mcp__context7__query-docs —— 检查 WebSocket 与事件模式
实现之后,运行 fuse-ai-pilot:sniper 进行校验。
快速配置
执行安装命令: php artisan install:broadcasting
并设置以下环境变量: BROADCAST_CONNECTION=reverb REVERB_APP_ID=my-app REVERB_APP_KEY=my-key REVERB_APP_SECRET=my-secret REVERB_HOST=0.0.0.0 REVERB_PORT=8080
关键规则
- 对已认证的数据使用私有频道。
- 在 routes/channels.php 中授权频道。
- 使用 ShouldBroadcast 实现队列投递(推荐)。
- 生产环境中将 Reverb 运行在 Nginx/Caddy 之后并启用 SSL。
参考指南
- 频道类型与授权:channels.md
- Echo 设置与客户端监听器:client.md
最佳实践
推荐做法:使用 ShouldBroadcast 配合队列以提升可扩展性;对私有频道和 presence 频道进行授权;使用 presence 频道实现用户感知。
不推荐做法:在公共频道广播敏感数据;忘记为跨域客户端配置 CORS;在没有反向代理的情况下直接暴露 Reverb。
Laravel 13 说明
Reverb 1.x(当前 1.12)与 Laravel 13 兼容,无需更改。注意事项:
- 可通过 Queue::route(ShouldBroadcast::class, queue: 'events') 将广播事件路由到队列(参见 [[laravel-queues]])。
- Context::add() 会自动传播到广播事件中。
- PHP:Reverb 支持 PHP 8.2+,但 Laravel 13 要求最低 PHP 8.3。
- 备选:一手 Mercure 驱动(13.32+),可通过 php artisan install:broadcasting 安装(13.33 提供 --pretend 选项用于预览)。
限制
资料未说明收费、价格、具体性能指标或平台支持范围等信息。