【问题标题】:WebSocket overhead and manually buffering packetsWebSocket 开销和手动缓冲数据包
【发布时间】: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


【解决方案1】:

白板和“手绘/铅笔/画笔”如果只是发送 x,y 数据,我可能会鼓励发送 x,y,time 时间来代替突然绘制的线条,而是逐渐绘制。如果您打算查询 x,y,time ,您可以查看 www.npmjs.com 并查找“差异”库

还有一些“差异”可以处理图像格式之间的差异。仅发送时间点 a 和时间点 b 之间的差异。 dailup 用户 = 慢速连接,每 2 到 120 秒更新一次。而宽带连接每 1 到 10 秒更新一次,等待延迟/延迟。宽带 + 高延迟 / 延迟 = 卫星用户。其他国家的人(跨越大洋)=高滞后。

如果纯粹跟随鼠标光标,然后单击鼠标左/右键,并发送他们单击的菜单按钮的某种 ID。然后在画布区域中拖动光标快速。 dailup 用户可能会很快落后。并建议同时排队(正在绘制的人)、服务器排队和观看需要排队的人。

发送的数据 1,2,3,4,5,6,7,8,9 可能以 1,3,5,4,2,6,7,9,8 的形式传入,并且得到处理,因为你得到了数据,但不是按照预期的顺序。如果仅捕获鼠标的 x,y 数据,则会导致涂鸦与平滑线。

想想游戏和滞后。你正在前进,突然“橡皮筋”到以前的位置。查询并处理“回滚”时间机器,并从以前的时间开始重新绘制白板。将有助于处理涂鸦。

在互联网上观看视频并暂停视频。并等待缓冲区/队列加载到某个点,然后再播放电影。

tcp/ip = 防止丢失数据,由于开销较小,流可以允许更多信息,但是流可以并且将会丢失数据。

白板中的每一个小像素对于您的预期用户群来说有多重要。说数学课,画一些不同的符号和数字。或通过鼠标和铅笔/手绘图标快速书写。按钮的复杂程度,例如“油漆罐/刷子”又名喷水器,它会在您移动鼠标时随机投掷点。或者当你放大,并处理每个像素的像素(实际上看到每个像素的轮廓框)

您可能会寻找一些“帮助台”应用程序,如果您将控制权交给其他人,他们可以接管您的鼠标/键盘并查看您所看到的内容。 “会议”应用程序,很可能也内置了 que 等。

您是要设置一个“设置”并应用于所有正在观看的人,还是要为每个观看者提供单独的设置?以适应那里的连接。如果以个人为单位,您是否将拥有服务器,主要询问谁在绘图,然后每个人计算对每个观察者最好的?还是 CPU 受限,例如智能手机、pda 等...

.......................

为您的应用找出一些额外的用例场景。并从那里构建,即使没有优化,一旦在那里,然后开始优化它。这可能意味着重新做应用程序的很大一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多