【发布时间】:2016-05-26 03:02:42
【问题描述】:
前言:我知道这可能是过早的优化。请在回答时忽略这一点。
我正在开发一个使用 WebSockets 的白板类型程序,其中一次只有一个人可以绘图,房间里的其他人都可以观看绘图。
目前有很多仅包含 x 和 y 坐标的数据包,每秒发送大约 40 次,具体取决于它们绘制的速度。
我想知道,首先,WebSockets 有什么样的开销。我环顾四周,但找不到非常明确的答案。我想知道的是从服务器发送到客户端的每个坐标数据包,有多少开销?有些地方说只有几个字节,但由于 TCP/IP 标头信息,其他来源说大约 80。
其次,将所有这些坐标数据包排队,然后每隔几秒钟左右发送一次,这是不是一个好主意?客户总是会落后几秒钟,但每次他们收到一个块时,他们都会均匀地间隔并播放它们,这样看起来很流畅。
或者也许有一些其他的方法可以自动缓冲这样的数据包,或者可能出于其他任何原因没有必要(开销不像我认为的那样)?
编辑: 后续问题:那么,如果我确实将消息排队,那么在发送它们之前使它们的大小合适(大约字节)?我认为如果它们变得太大,我可能会遇到相反的问题,协议将不得不手动拆分它们。
【问题讨论】:
-
这里可以看到webSocket数据包格式:developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/…。带宽消耗可能不是您的问题。在 node.js 和 TCP 堆栈中处理大量小数据包时,问题将更多。
-
jfriend00:这不只是框架吗?包含它的包含 IP 信息和诸如此类的数据包呢?我说的是从服务器向客户端发送一条 websocket 消息的总带宽成本。
-
是的,如果这就是您所说的,它会被包装在 TCP 数据包中。这也很小,但它确实贡献了一些字节。
-
“一些”不是大约 80 个字节吗?这大约是带宽的 90%,不是吗?
-
我放弃了。删除了我的答案。
标签: javascript node.js performance sockets websocket