我需要先读取一些流的(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/