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
相关产品推荐
相关产品推荐

