例如,如果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()
侦听器处理?
答案 0 :(得分:0)
希望我能完全理解您的问题。
socket.io所做的是“复用”这些数据包,这意味着所有数据包都将通过同一通道发送。 由于不同的原因,这些数据包不会同时发送/未合并在单个数据包中。第一,在带宽方面存在风险。如果您有5个每个50kb的数据包怎么办?如果发生网络故障或数据包丢失,您将丢失全部5个数据包,而不是一个。现在这不是问题,但是如果我们说的是更大尺寸的数据包,那就成了问题。
根据传输的性质,应该串行传输数据包。您可能会感兴趣的是,这些数据包有时不会以相同的顺序到达,但是它们是通过协议重组的。对于TCP / IP,这些数据包将在转发给应用程序之前进行重组。
您可能想了解connectionless vs connection-oriented,以了解是需要发送所有数据包还是可以单独发送它们。