- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在寻找这个问题的明确答案,但我似乎一直在寻找相互矛盾的答案(例如 this 和 this)。
基本上,如果我
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 emit,我想提高服务器的滴答率,但我想确保独立的游戏更新不会相互阻塞。我宁愿客户端每 30 毫秒接收一次更新,这里和那里散布着一些丢失的更新,而不是让客户端接收一个更新,200 毫秒什么都没有接收,然后同时接收 6 个以上的更新。
最佳答案
免责声明:我并不完全熟悉 socket.io
的内部结构。
is there any way that the n:2 message arrives before the n:1 message?
这取决于您使用的传输方式。对于 轮询
传输,我认为可以公平地说消息完全有可能乱序到达,因为每条消息都可以通过不同的连接到达。
通过保持持久连接的websocket
传输,消息顺序得到合理保证。
What if they were volatile emits?
有了 volatile emits,所有的赌注都没有了,它是即发即弃的。我认为在正常情况下,服务器将等待(并排队消息)客户端准备好接收消息,除非这些消息是易变的,在这种情况下服务器将丢弃它们。
根据您所说的,我认为 volatile emits 是您想要的,尽管一旦建立了 websocket 连接,我认为您不会看到所描述的场景(“接收更新,接收200 毫秒内什么都没有,然后一次又收到 6 个更新”)很可能会发生。也许只有当连接丢失并重新建立时。
关于javascript - Socket.io 会乱序发送吗?如果不稳定怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37770773/
我是一名优秀的程序员,十分优秀!