什么是socket.js套接字流对话的范例?

时间:2017-01-14 23:34:20

标签: node.js sockets stream

我正在尝试实现套接字协议,我不清楚如何继续。我将套接字作为Stream对象,并且我能够将()数据写入它以在套接字上发送,并且我知道“可读”或“数据”事件可用于接收数据。但是,当协议涉及一个主机应该发送一个数据,等待响应,然后在响应之后再次发送数据的会话时,这不能很好地工作。

在块范例中,它看起来像这样:

send some data
wait for specific data reply
massage data and send it back
send additional data

据我所知,node的Stream对象没有一个read函数,它将以请求的字节数异步返回。否则,每次等待都可以将剩余的功能放在自己的回调中。

此类通信的node.js范例是什么?

1 个答案:

答案 0 :(得分:0)

从技术上讲,有一个Readable.read(),但不建议使用它(也许你不能确定它的大小或阻塞,不确定。)你可以跟踪状态并在每个数据事件上添加到一个缓存,你继续递增处理。如果需要,可以在Buffer上使用readUInt32LE等来读取特定的二进制数据(或者如果它的文本数据可以转换为字符串)。 https://github.com/runvnc/metastream/blob/master/index.js

如果你想在你的'块范例中写它,你基本上可以做一些承诺或异步函数然后

let specialReplyRes = null;

waitForSpecialReply = f => new Promise( res => specialReplyRes = res);

stream.on('data', (buff) => {
  if (buff.toString().indexOf('special')>=0) specialReplyRes(buff.toString());
});

// ...

async function proto() {
  stream.write(data);
  let reply = await waitForSpecialReply();
  const message = massage(reply);
  stream.write(message);
}

在您通过解析收到某条消息后,存储并解析了waitForSpecialReply承诺。