You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:33:59