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

Flutter中无法连接socket.io问题求助

Flutter中socket_io_client连接超时问题排查与修复

针对你使用socket_io_client: ^2.0.0连接Socket.IO时触发连接错误、超时的问题,可从以下方向排查修复:

1. 修正事件触发顺序

你当前在调用webSocket.connect()后立即执行emit("joinTradePairRoom"),此时连接尚未建立,无效请求会加剧超时问题。需将发送事件的操作移至连接成功的回调内。

2. 完善Socket初始化配置

添加超时、重连等关键配置,同时确保Socket URL格式符合要求(需包含完整的http/https协议、服务器地址及端口,带命名空间的话需追加路径)。

修改后的完整代码示例

import 'package:socket_io_client/socket_io_client.dart' as socket;
import 'constants.dart';

void initSocket() {
  socket.Socket webSocket = socket.io(constant.demoSocketUrl, <String, dynamic>{
    'transports': ['websocket'],
    'autoConnect': false,
    'timeout': 10000, // 延长超时时间至10秒
    'reconnection': true,
    'reconnectionAttempts': 3, // 限制重连尝试次数
    'reconnectionDelay': 2000, // 设置重连间隔
  });

  // 先注册所有监听事件,再执行连接
  webSocket.onConnect((data) {
    print('连接成功: $data');
    print('connect: ${webSocket.id}');
    // 连接建立后再发送房间加入请求
    webSocket.emit("joinTradePairRoom");
  });

  webSocket.on("trade_pair_room", (data) {
    print("˚˚˚ $data");
  });

  webSocket.onConnectError((data) => print('连接错误: øøøø $data'));
  
  webSocket.onDisconnect((_) => print('连接断开'));

  webSocket.on('joinTradePairRoom', (data) {
    print("˚˚˚ $data");
  });

  webSocket.connect();
}

3. 服务器端排查要点

  • 确认Socket.IO服务器已启用websocket传输方式,未对该传输做限制
  • 检查服务器CORS配置,是否允许你的Flutter客户端域名跨域访问
  • 验证服务器地址、端口是否正确,且客户端网络可正常访问该地址(可通过浏览器或curl测试连通性)

内容的提问来源于stack exchange,提问作者Minato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:45:35