Socket.io可能发出错误吗? 如果波动?

我一直在四处寻找一个明确的答案,但我似乎不断find矛盾的答案( 这个和这个 )。

基本上,如果我

socket.emit('game_update', {n: 1}); 

从一个node.js服务器,然后,20毫秒后,

 socket.emit('game_update', {n: 2}); 

从同一台服务器,有没有任何方式,n:2消息之前到达n:1消息? 换句话说,如果n:1消息以某种方式在途中丢失,n:1消息是否“阻止”n:2消息的接收?

如果他们是挥发性排放呢? 我的理解是n:1消息不会阻塞n:2消息 – 如果n:1消息被丢弃,n:2消息在它到达时仍然会被接收。

背景:我正在构build一个node.js游戏服务器,并希望更好地了解我的游戏更新是如何旅行的。 我现在使用volatile发射,我想提高服务器的跳动速度,但我想确保独立的游戏更新不会互相阻塞。 我宁愿客户端每隔30毫秒收到一次更新,在这里和那里分布的一些丢弃更新比客户端收到更新,200毫秒没有收到任何东西,然后一次接收6个更新。

免责声明:我不完全熟悉socket.io的内部。

有没有什么办法可以让n:2消息在n:1消息之前到达?

这取决于你使用的运输。 对于polling运输,我认为可以公平地说,消息到达乱序是完全可能的,因为每条消息都可以通过不同的连接到达。

通过持续连接的websocket传输,消息顺序得到了合理的保证。

如果他们是挥发性排放呢?

随着挥发性的排放,所有的投注都closures了,这是一个难忘的事情。 我认为,在正常情况下,服务器将等待(并排队消息)客户端准备接收消息,除非这些消息是易失性的,在这种情况下,服务器将放弃它们。

从你所说的话,我认为挥发性发射是你想要的,虽然一旦一个websocket连接已经build立,我不认为你会看到描述的情况( “接收更新,200毫秒没有收到任何东西,然后一次接收6个更新“ )可能会发生。 也许只有当连接丢失并重新build立时。