Laravel+Pusher生产环境事件广播失效排查求助
Laravel广播事件VPS部署失效排查与修复
核心问题定位
本地运行正常但VPS生产环境失效,核心原因是WebSocket服务绑定地址与前端连接地址不匹配,同时存在配置细节错误导致事件无法正常广播。
分步修复方案
1. 调整WebSocket服务监听地址
如果使用Laravel Echo Server作为WebSocket服务:
- 修改
laravel-echo-server.json中的host字段为"0.0.0.0",让服务监听所有网卡(默认127.0.0.1仅允许本地访问):"host": "0.0.0.0" - 重启WebSocket服务:
laravel-echo-server restart
2. 修正后端广播配置(broadcasting.php)
- 确保
.env中BROADCAST_DRIVER=pusher,不能是null或log - 保留pusher连接的
host:127.0.0.1(后端向本地WebSocket服务推送事件),优化其他配置项:'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'encrypted' => false, // 本地WebSocket用http,关闭加密 'host' => '127.0.0.1', 'port' => 6001, 'scheme' => 'http', ], ],
3. 修正前端Echo连接配置
前端必须连接VPS的公网IP,而非localhost:
window.Echo = new Echo({ broadcaster: 'pusher', key: import.meta.env.VITE_PUSHER_APP_KEY, wsHost: '你的VPS公网IP', // 替换为实际公网IP wsPort: 6001, forceTLS: false, // 非HTTPS环境关闭强制TLS disableStats: true, enabledTransports: ['ws'], // 简化传输方式,避免兼容问题 });
注:如果VPS使用HTTPS,需配置wss端口和证书,此处先以HTTP环境为例
4. 开放VPS防火墙/安全组
- 对外开放6001端口(WebSocket服务端口):
- UFW防火墙:
ufw allow 6001/tcp && ufw reload - 云服务商安全组:添加入站规则,允许TCP 6001端口访问
- UFW防火墙:
5. 验证事件是否触发
事件的handle()方法仅用于队列任务,广播事件不会触发。要验证事件是否执行,在broadcastOn()中添加日志:
public function broadcastOn() { \Log::info('MessageSent事件已触发,广播频道:chat.' . $this->message->room->id); return new PrivateChannel('chat.' . $this->message->room->id); }
查看storage/logs/laravel.log,如果有对应日志,说明事件已正常触发;如果没有,检查控制器中broadcast()调用是否执行。
6. 检查WebSocket服务连接状态
- 在VPS启动WebSocket服务后,观察控制台输出:前端连接时会显示
New connection opened日志 - 用curl测试服务可达性:
curl http://你的VPS公网IP:6001,正常返回包含socket_id的JSON内容则说明服务运行正常
内容的提问来源于stack exchange,提问作者zker mark
相关产品推荐
相关产品推荐

