gpt4 book ai didi

javascript - 您是否应该在 socket.io 中为可扩展应用程序手动批处理数据包?

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

我正在使用 node.js 和 socket.io 制作一个白板应用程序只是为了好玩。但是,出于本文的目的,我们假设它有数千个连接,并且我正在努力使其具有可扩展性和高效性。

假设有人画了一个笔触。这必须广播给房间里的客户,这样他们才能看到它(点列表)。为了实时,每个单独的点在被刷过时都会立即作为一个数据包发送。

我担心的是数据包开销。这些数据包仅包含一个 x 和一个 y 值,并且有 40 多个字节的数据包开销。根据其长度,单个笔刷可能会发出 50 多个数据包。不仅如此,我相信 Nagle 的算法对于 socket.io 是禁用的(尽管我在文档中的任何地方都找不到它),所以没有数据包合并。即使不是,我也不确定有多少数据包会被批处理并作为一个发送。

我想出了一个使用队列的想法,这样所有的刷子 Action 都会被排队,然后每 3 秒左右作为一个大数据包发送,然后在接下来的 3 秒内在客户端平滑地播放一段时间。这样,总会有 3 秒的延迟,但它仍然是平滑和准实时的,并且使用更少的数据包(因此开销大大减少)。

我的问题如下:

  • 这是否已经在幕后为我处理,我无需担心?
  • 即使对于大量连接来说,这是否也太过分了,不值得实现?
  • 是否有现有的解决方案可以为您解决这个问题?

最佳答案

不是套接字专家,但如果您确实连接到大量客户端并且想要减少“聊天”,您可能会考虑使用 UDP 而不是客户端广播的 tcp/ip。这应该会大大减少您的流量。

与其在套接字级别进行批处理,不如尝试在更高级别减少数据?您可以尝试将连续的网格坐标连接成线段或贝塞尔曲线以进行传输,而不要管套接字。我认为这可能更简单。

关于javascript - 您是否应该在 socket.io 中为可扩展应用程序手动批处理数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680272/

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