本页面聚焦于 Reverb 服务器自身的部署与运维。
关于广播事件的创建以及 Laravel Echo 的使用,请参阅广播。
什么是 Reverb
Laravel Reverb 是 Laravel 官方提供的自托管 WebSocket 服务器。 无需依赖外部服务,即可为 Laravel 应用添加高速且可扩展的实时通信。 Reverb 在广播基础之上运行,承担将服务端事件通过 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 终止,再把请求代理到 Reverb。 如果希望在本地开发环境使用安全的 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 应用发送广播消息的目标地址。
在生产环境中这两组值可能不同。调试模式
出于性能考虑,Reverb 默认不会输出调试信息。 如果想查看连接与消息流,可以使用--debug 选项。
重启服务器
Reverb 是长驻进程,代码变更需要重启才能生效。reverb:restart 命令会先优雅关闭所有连接再停止服务器。
监控
Reverb 支持与 Laravel Pulse 集成。 可以在仪表盘上实时显示连接数和消息数。 首先在config/pulse.php 中添加 Reverb 的 recorder。
pulse:check 守护进程。
在水平扩展的部署中,pulse:check 仅需在其中一台服务器上运行。
生产环境运维
文件打开数限制
每个 WebSocket 连接会占用一个文件描述符。 请确认 OS 级别的限制,必要时提升上限。/etc/security/limits.conf 中修改上限。
事件循环(ext-uv)
Reverb 默认使用 PHP 的stream_select,其最多支持 1024 个文件。
若要支持 1000 个以上的并发连接,请安装 ext-uv 以解除限制。
ext-uv 可用,Reverb 会自动切换到它。
Nginx 反向代理
生产环境不建议直接暴露 Reverb,而应通过 Nginx 等 Web 服务器代理。 以下是 Nginx 配置示例:nginx.conf 中的 worker_rlimit_nofile 和 worker_connections。
进程管理(Supervisor)
生产环境中建议使用 Supervisor 管理 Reverb 进程。 在supervisor.conf 中设置 minfds,以确保获得必要的文件描述符。
扩展(Redis)
单台服务器无法承载所需连接量时,可以使用 Redis 的 pub/sub 功能进行水平扩展。 在.env 中启用扩展。
Laravel Cloud 提供了完全托管的 WebSocket 基础设施,可以无需自行运维基础设施即可部署基于 Reverb 的应用。
事件
Reverb 在连接与消息的生命周期中会派发以下事件。 你可以通过事件监听器接收它们并添加自定义处理。| 事件 | 说明 |
|---|---|
ChannelCreated | 频道被创建(首个连接订阅时) |
ChannelRemoved | 频道被删除(最后一个连接退订时) |
ConnectionPruned | 服务器清理陈旧连接时 |
MessageReceived | 收到客户端消息时 |
MessageSent | 向客户端发送消息时 |
Laravel\Reverb\Events 命名空间。
下一步
广播
了解广播事件的创建、频道授权以及 Laravel Echo 的配置。
事件与监听器
学习用于接收 Reverb 事件的 Laravel 事件系统。