我正在尝试实现套接字协议,我不清楚如何继续。我将套接字作为Stream对象,并且我能够将()数据写入它以在套接字上发送,并且我知道“可读”或“数据”事件可用于接收数据。但是,当协议涉及一个主机应该发送一个数据,等待响应,然后在响应之后再次发送数据的会话时,这不能很好地工作。
在块范例中,它看起来像这样:
send some data
wait for specific data reply
massage data and send it back
send additional data
据我所知,node的Stream对象没有一个read函数,它将以请求的字节数异步返回。否则,每次等待都可以将剩余的功能放在自己的回调中。
此类通信的node.js范例是什么?
答案 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承诺。