Laravel Echo无法连接Socket服务器求助(Pusher.js可正常连接)
Laravel Echo无法连接beyondcode/laravel-websockets但Pusher.js正常的解决方案
以下是针对该问题的排查和解决步骤:
- 添加
disableStats参数
beyondcode/laravel-websockets不需要Pusher的统计服务,默认情况下Echo会尝试请求统计接口,这可能导致连接失败。在Echo配置中加入该参数:
window.Echo = new Echo({ broadcaster: 'pusher', key: 'a12bc34', cluster: 'mt1', encrypted: false, wsHost: '127.0.0.1', wsPort: 6001, forceTLS: false, disableStats: true // 新增此参数 });
- 强制指定传输方式
有时Echo会优先尝试其他非WebSocket的传输协议,强制限定只使用WebSocket:
window.Echo = new Echo({ broadcaster: 'pusher', key: 'a12bc34', cluster: 'mt1', encrypted: false, wsHost: '127.0.0.1', wsPort: 6001, forceTLS: false, disableStats: true, enabledTransports: ['ws', 'wss'] // 只启用WebSocket传输 });
- 检查Laravel端广播配置
确认.env文件中的广播驱动和Pusher配置正确:
BROADCAST_DRIVER=pusher PUSHER_APP_ID=你的应用ID PUSHER_APP_KEY=a12bc34 PUSHER_APP_SECRET=你的应用密钥 PUSHER_APP_CLUSTER=mt1
同时确保config/broadcasting.php中的pusher配置指向本地WebSocket服务:
'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'encrypted' => false, 'host' => '127.0.0.1', 'port' => 6001, 'scheme' => 'http', 'curl_options' => [ CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, ], ], ],
- 查看控制台日志定位具体问题
打开浏览器开发者工具的Console标签,查看Pusher的日志输出,里面会包含连接失败的详细原因(如地址错误、权限问题等),根据日志信息进一步排查。
另外注意:你的Echo代码中监听的事件名是eventInternalTransferFormd,比Pusher.js中的多了一个末尾的d,即使连接成功也无法接收事件,建议修正为一致的名称。
内容的提问来源于stack exchange,提问作者amirhossein masoudi
相关产品推荐
相关产品推荐

