如果Socket.io包几乎同时发送,是否会“组合”包?

时间:2018-12-20 16:07:27

标签: javascript node.js socket.io

例如,如果NodeJS服务器具有以下代码:

socket.emit('msg', { data: 'abc123' });
socket.emit('msg', { data: 'aaaaa' });
socket.emit('another_event', { data: 'ooooo' });
socket.emit('yet_another_event', { data: '555' });

是否总是会有4个单独的数据包发送到客户端?还是Socket.io尝试将数据包“组合”为单个数据包,然后客户端的Socket.io将“分离”单个数据包,以使其由适当的io.on()侦听器处理?

1 个答案:

答案 0 :(得分:0)

希望我能完全理解您的问题。

socket.io所做的是“复用”这些数据包,这意味着所有数据包都将通过同一通道发送。 由于不同的原因,这些数据包不会同时发送/未合并在单个数据包中。第一,在带宽方面存在风险。如果您有5个每个50kb的数据包怎么办?如果发生网络故障或数据包丢失,您将丢失全部5个数据包,而不是一个。现在这不是问题,但是如果我们说的是更大尺寸的数据包,那就成了问题。

根据传输的性质,应该串行传输数据包。您可能会感兴趣的是,这些数据包有时不会以相同的顺序到达,但是它们是通过协议重组的。对于TCP / IP,这些数据包将在转发给应用程序之前进行重组。

您可能想了解connectionless vs connection-oriented,以了解是需要发送所有数据包还是可以单独发送它们。