Flutter集成pusher_client与laravel_echo持续重连无法连接求助
连接循环重连问题排查与修复
你当前代码存在几处核心配置冲突,是导致连接一直在connecting和重连状态切换的直接原因,逐一修复即可:
核心配置问题说明
- 协议配置矛盾:
PusherOptions中设置encrypted: false(指定走非加密ws协议),但Echo配置中又设置forceTLS: true(强制走加密wss协议),底层客户端握手时协议不匹配,会直接被服务端断开连接触发重连。 - 重复配置冗余:你已经手动实例化了
PusherClient传入Echo,不需要再在Echo的初始化参数中重复声明wsHost/wsPort/wssPort这类连接参数,重复传参可能触发配置覆盖异常。 - 端口与协议不匹配:绝大多数自部署的Laravel Websockets服务,6001端口默认跑非加密ws协议,wss加密流量一般通过Nginx/Apache反代走443端口,你当前强制TLS连6001端口本身就不符合常规部署逻辑。
修正后可运行代码
// 先确认你的服务端协议类型,这里以默认6001端口非加密ws为例 PusherOptions options = PusherOptions( host: 'reservegcc.com', wsPort: 6001, encrypted: false, // 和forceTLS配置保持一致,非加密设false,加密设true ); PusherClient pusher = PusherClient( '11111', // 替换为服务端配置的真实App Key,不要用占位符 options, autoConnect: false, ); // 已经传入实例化好的pusher client,不需要重复传连接参数 Echo echo = Echo({ 'broadcaster': 'pusher', 'client': pusher, "disableStats": true, 'forceTLS': false, // 和上面encrypted参数保持一致 }); echo.channel('restaurant-transactions').listen('Transaction', (e) { print(e); }); echo.connector.pusher.onConnectionStateChange((state) { print(state!.currentState.toString()); }); // 绑定错误监听,方便定位具体报错 echo.connector.pusher.onConnectionError((error) { print("连接错误: $error"); }); echo.connector.pusher.connect();
额外排查项
如果改完配置还是连不上,按顺序检查:
- 确认你填的App Key是服务端Laravel Websockets配置文件中真实存在的key,不是测试占位符,key校验失败会被服务端直接断开
- 确认服务端安全组、防火墙已经放行了6001端口的入站TCP访问,可以先用本地websocket测试工具直连
ws://reservegcc.com:6001/app/你的真实appKey验证端口连通性,直连失败优先排查服务端配置 - 页面销毁时记得在
dispose生命周期调用echo.disconnect()释放连接,避免后台异常重连 - 如果需要走wss加密连接,不要直接连6001端口,配置服务端反向代理后用443端口连接,同时把
encrypted和forceTLS都设为true
内容的提问来源于stack exchange,提问作者kenjilaurel
相关产品推荐
相关产品推荐

