You need to enable JavaScript to run this app. Dart如何处理多Socket响应?高频轮询命令与应答不匹配问题求解
优惠活动
大模型
产品
解决方案
定价
更多

Dart如何处理多Socket响应?高频轮询命令与应答不匹配问题求解

Socket高频轮询场景下请求与响应不匹配问题

业务需求

需要持续向服务端发起Socket轮询,请求内容存储在列表pollingCommands中,一共包含4条命令:Command1、Command2、Command3、Command4,每条命令对应服务端返回的固定结果:Answer1、Answer2、Answer3、Answer4。

现有实现逻辑

Socket连接与轮询定时器代码

Socket.connect(ip, port).then((Socket sock) {
  _socket = sock;
  _socket.listen(
    dataHandler,
    onError: errorHandler,
    onDone: doneHandler,
    cancelOnError: false,
  );
  timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
    if (isComplete) {
      _socket.write(
        Command.pollingQuery(pollingCommands[pollingCycle]),
      );
    }
  });
}).catchError((Object error) {
  print("ERROR !");
});

数据接收回调代码

dataHandler为Socket监听的消息处理回调,具体实现如下:

void dataHandler(data) {
  result = String.fromCharCodes(data).trim();
  if (isComplete) {
    isComplete = false;
    // 自定义业务处理
    if (pollingCycle == pollingCommands.length - 1) {
      pollingCycle = 0;
      isComplete = true;
    } else {
      pollingCycle++;
      isComplete = true;
    }
  }
}

现存异常

该实现在定时器轮询间隔大于500ms时可稳定运行,但提高轮询频率后,会出现服务端返回的响应与本地发送的请求命令不匹配的问题,需要定位原因并给出可行的解决方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 03:45:06