gpt4 book ai didi

javascript - Socket.io 会乱序发送吗?如果不稳定怎么办?

转载 作者:搜寻专家 更新时间:2023-11-01 00:00:04 25 4
gpt4 key购买 nike

我一直在寻找这个问题的明确答案,但我似乎一直在寻找相互矛盾的答案(例如 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 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com