WebSocket开销和手动缓冲数据包

时间:2016-05-25 17:40:25

标签: javascript node.js performance sockets websocket

前言:我知道这可能是过早的优化。在回答时请忽略它。

我正在使用一个使用WebSockets的白板类型程序,其中一次只能有一个人可以绘制,而房间中的其他人都可以观看绘图。

目前有很多数据包只包含x和y坐标,每秒发送40次左右,具体取决于它们绘制的速度。

首先,我想知道WebSockets有什么样的开销。我环顾四周,但找不到相当明确的答案。我想知道的是从服务器发送到客户端的每个坐标数据包,有多少开销?有些地方只说几个字节,但其他来源说由于TCP / IP头信息而导致大约80个字节。

其次,排队所有这些坐标数据包然后每隔几秒左右发送一次是不是一个好主意?客户端总是落后几秒钟,但每当他们收到一块时,他们会均匀地放置并播放它们,看起来很流畅。

或许还有其他方法可以自动缓冲这样的数据包,或者可能因为其他原因没有必要(开销不像我想的那样)?

编辑:后续问题:所以如果我排队消息,那么在发送消息之前制作它们的大小是什么(大约字节)?我认为,如果它们变得太大,我可能会遇到相反的问题,协议必须手动拆分它们。

1 个答案:

答案 0 :(得分:1)

白板和"手绘/铅笔/油漆刷"如果只是发送x,y数据,我可能会鼓励发送一个x,y,而时间则是为了绘制一条突然的线,而是逐渐被绘制。您可以查看www.npmjs.com并查找"差异"库,如果你计划排队x,y,时间

还有一些"差异"处理图像格式之间的差异。仅发送时间点和时间点b之间的差异。 dailup users =慢速连接并获得更新说每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数据,则会产生涂鸦与平滑线。

想想游戏和滞后。你正在前进,然后突然出现橡胶带#34;到以前的位置。 que并且处理"回滚"时间机器,并开始重新绘制前一次的白板。会帮助处理涂鸦。

在互联网上观看视频并暂停视频。在播放电影之前等待缓冲区/曲目加载到某一点。

tcp / ip =防止丢失数据,流可以允许更多信息,因为开销更少,但可能会,并且会有数据丢失流。

白板中的每个小像素对您的预期用户群有多重要。说数学课,画一些不同的符号和数字。或通过鼠标和铅笔/自由手图标快速绘图。按钮的复杂程度,例如" paint can / brush"也就是在移动鼠标时随机抛出点的squritter。或者当你放大并处理每个像素的像素时(实际上看到像每个像素的轮廓一样的框)

你可能会寻找一些帮助台"应用程序,你是否控制别人,他们可以接管你的鼠标/键盘,看看你看到了什么。 "会议"应用程序,很可能也有内置和类似的内置。

你要设置一个"设置"并适用于正在观看的每个人,或者为每个观察者提供个人设置?以适应那里的联系。如果每个人,你是否有服务器,有谁正在绘制,然后每个人计算什么是最好的每个观察者?或者是CPU限制,如智能手机,PDA等...

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

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