Socket响应的异步处理



我的问题如下:我有一个TCP套接字,在这个套接字上我基于专有协议异步发送消息。在收到消息的响应后,我需要确保将数据发送回最初发送消息的函数。问题是我只能监听套接字上的"数据"事件的响应(在这种情况下在Node.js中),并且我没有办法轻松确定哪些响应对应于哪些消息。

下面是一个例子,我希望能给你一个想法,我正在努力完成。

function getTemperature (callback) {
  socket.write(message);
  // Good?
  socket.on('data', callback);
}
function getVoltage (callback) {
  socket.write(message);
  // Other way to invoke callback?
}
getTemperature(function (err, temperature) {});
getVoltage(function (err, voltage) {});
socket.on('data', handleData function (data) {
  // Somehow send data to correct function
}
我的一个想法是为data事件注册多个事件处理程序,但这似乎有点古怪。正确的处理方法是什么?

在处理异步协议时,通常需要设计协议,以便每个请求都有一个唯一的ID,该ID包含在请求数据中,并在响应中发送回来。这样,您可能会收到无序的响应,甚至收到未经请求的消息。

当您发送请求时,将请求ID放在某个位置的列表中,以及响应到达时将调用的回调。

当您获得数据事件时,将原始数据附加到缓冲区中,然后仅从缓冲区中解析出完整的消息,留下不完整的消息供以后完成。对于解析出的每个完整消息,检查它是否具有请求ID。如果不是,则消息是未经请求的,因此相应地处理它。否则,在列表中查找请求ID,如果找到,则调用与之关联的回调。

最新更新