Socket.io可以发出故障吗?如果不稳定怎么办?

时间:2016-06-12 04:36:56

标签: javascript node.js websocket socket.io

我一直在四处寻找明确的答案,但我似乎总是找到相互矛盾的答案(前thisthis)。

基本上,如果我

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消息。

背景:我正在建立一个node.js游戏服务器,希望更好地了解我的游戏更新的方式。我现在正在使用volatile发射器,我想提高服务器的滴答率,但我想确保独立的游戏更新不会相互阻塞。我希望客户端每隔30毫秒收到一次更新,其中散布的更新数据分散在这里,而不是客户端收到更新,200毫秒内没有收到任何更新,然后一次又收到6个更新。

1 个答案:

答案 0 :(得分:1)

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

  

是否有任何方式n:2消息在n:1消息之前到达?

这取决于您正在使用的运输。对于polling传输,我认为可以说消息无序到达是完全可能的,因为每条消息都可以通过不同的连接到达。

使用保持持久连接的websocket传输,可以合理地保证消息顺序。

  

如果它们是挥发性发射怎么办?

随着波动性的下降,所有的赌注都会被取消,这是一次又一次的冒险。我认为在正常情况下,服务器将等待(并排队消息)以使客户端准备好接收消息,除非这些消息是易失性的,在这种情况下服务器将丢弃它们。

根据你所说的,我认为易失性发射是你想要的,虽然一旦建立了websocket连接,我认为你不会看到所描述的场景(“收到更新,接收没有200毫秒,然后一次又一次接收6个更新“)可能会发生。也许只有当连接丢失并重新建立时。