Javascript 如果一个应用程序打开2个TCP套接字,是否会在这两个套接字之间维护顺序属性?

Javascript 如果一个应用程序打开2个TCP套接字,是否会在这两个套接字之间维护顺序属性?,javascript,sockets,networking,tcp,websocket,Javascript,Sockets,Networking,Tcp,Websocket,如果我有一个Javascript应用程序可以并行打开两个WebSocket,其中两个WebSocket都位于同一端口上的同一主机上: var socket1 = io.connect(host); var socket2 = io.connect(host); 然后我将它们中的每一个数据发送到应用程序中的同一个函数: socket1.on("data", function(e) {doStuff(e);}); socket2.on("data", function(e) {doStuff(e)

如果我有一个Javascript应用程序可以并行打开两个WebSocket,其中两个WebSocket都位于同一端口上的同一主机上:

var socket1 = io.connect(host);
var socket2 = io.connect(host);
然后我将它们中的每一个数据发送到应用程序中的同一个函数:

socket1.on("data", function(e) {doStuff(e);});
socket2.on("data", function(e) {doStuff(e);});

每个套接字是仅为其自身强制执行顺序属性,还是为整个应用程序强制执行顺序属性?例如,如果发送到socket1的数据包丢失,socket2是否仍然能够接收和处理未来的TCP数据包,而不必等待数据包重新传输到socket1?

这两个套接字将完全独立。在一个连接上发送的数据不会对另一个连接产生影响,无论丢失和重新传输如何。具体来说,TCP用于数据完整性的序列号空间特定于(addr1、port1、addr2、port2)的四个元组。

这两个套接字将完全独立。在一个连接上发送的数据不会对另一个连接产生影响,无论丢失和重新传输如何。具体来说,TCP用于数据完整性的序列号空间特定于的四个元组(addr1、port1、addr2、port2)。

但假设它们在同一端口上与同一服务器通信?两个连接的元组不是都一样吗?@Joey不,不是。客户端上将使用两个不同的端口。还要记住,Web套接字是一个单独的协议,它通过TCP运行,Socket.IO是Web套接字或其他传输之上的另一个协议。你的问题混淆了所有这些层次。事实上,Socket.IO根本不需要持久连接就可以工作。@Brad是正确的。TCP连接由这四个元组定义。如果在两个连接上使用相同的端口号,则没有两个TCP连接,只有一个。但是你没有-每个WebSocket都是一个单独的客户端端口号。但是假设它们在同一端口上与同一服务器通信?两个连接的元组不是都一样吗?@Joey不,不是。客户端上将使用两个不同的端口。还要记住,Web套接字是一个单独的协议,它通过TCP运行,Socket.IO是Web套接字或其他传输之上的另一个协议。你的问题混淆了所有这些层次。事实上,Socket.IO根本不需要持久连接就可以工作。@Brad是正确的。TCP连接由这四个元组定义。如果在两个连接上使用相同的端口号,则没有两个TCP连接,只有一个。但您没有-每个WebSocket都是一个单独的客户端端口号。