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