我需要先读取一些流的(TCP / net.Socket)数据,然后再知道应在何处进行管道传输。但是数据似乎没有到达endSocket

socket.on('data', data => {
  var endSocket = getEndSocket(data);
  stream
    .pipe(endSocket)
    .pipe(socket); // send response back
});


以下代码确实有效,但是我觉得为简单起见,我应该使用.pipe()

socket.on('data', data => {
  var endSocket = getEndSocket(data);
  endSocket.write(data);
  endSocket.pipe(socket); // send response back
});

最佳答案

这取决于您要如何处理其余数据。如果将管道添加到套接字并保留数据侦听器,并且在同一套接字上发送了更多软件包,则每个软件包都将被复制到正在通过管道传输的所有endSocket中。

适合您第一个示例的模式是,如果您想拥有一个初始数据包来选择要连接的endSocket。然后,您应该建立一条双向管道,并断开该数据包上的数据侦听器。您还必须写入已经读取的数据,因为管道不会将其重播到endSocket。

如果来自相同来源的每个软件包都应使用不同的endSocket,则第二个示例看起来很完美。

关于javascript - 首先读取数据,以确定将.pipe()放在哪里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35651814/

10-12 15:13