首先读取数据以决定在哪里使用 .pipe()

Read data first to decide where to .pipe()

本文关键字:pipe 在哪里 决定 读取 数据      更新时间:2023-09-26

我需要读取一些流(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,那么您的第二个示例看起来很完美。