我需要先读取一些流的 (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。
如果来自相同sourcesocket的每个包都应该进入不同的endSockets,那么你的第二个例子看起来很完美。
关于javascript - 首先读取数据来决定在哪里 .pipe(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35651814/