Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为白板应用发送一个大数据包还是多个小数据包?_Javascript_Node.js_Sockets_Canvas_Socket.io - Fatal编程技术网

Javascript 为白板应用发送一个大数据包还是多个小数据包?

Javascript 为白板应用发送一个大数据包还是多个小数据包?,javascript,node.js,sockets,canvas,socket.io,Javascript,Node.js,Sockets,Canvas,Socket.io,我正在使用socket.io制作一个在线白板应用程序,只是为了好玩和学习,我正在尝试在绘图工具的这两个选项之间做出选择: 1) 等待大约20个点(或直到鼠标悬停),然后通过导线一次发送所有点阵列。对客户机的影响是,他们只会看到线路径每20点左右更新一次 2) 将每个点绘制为数据包后立即发送。这将导致多发送约20倍的数据包,但所有客户端都会立即响应 我不确定哪种选择更好。我担心如果我做第二个选择,服务器会被所有的点数据包所负担过重,但理想情况下会更好,因为它会响应速度很快,看起来很漂亮,但考虑到来

我正在使用socket.io制作一个在线白板应用程序,只是为了好玩和学习,我正在尝试在绘图工具的这两个选项之间做出选择:

1) 等待大约20个点(或直到鼠标悬停),然后通过导线一次发送所有点阵列。对客户机的影响是,他们只会看到线路径每20点左右更新一次

2) 将每个点绘制为数据包后立即发送。这将导致多发送约20倍的数据包,但所有客户端都会立即响应


我不确定哪种选择更好。我担心如果我做第二个选择,服务器会被所有的点数据包所负担过重,但理想情况下会更好,因为它会响应速度很快,看起来很漂亮,但考虑到来回发送的数据包数量,我不确定这是否可行。

即使您发送每个点数据包鼠标移动,并不一定意味着每一个都会有一个数据包通过电线传输。WebSocket层将缓冲数据,然后决定何时传输数据


您最好在每次收到指针事件时发送数据,以获得最佳的用户体验。

您对服务器过载的担忧完全属于过早优化的范畴;黑暗而危险的地方。我强烈建议尽可能地采取行动,如果你看到大量的性能问题,然后考虑节流。特别是因为你的包很小。而且您的用户数量很低。这是为了好玩和学习。而且服务器功能强大。宽带无处不在。让您的设计需求决定您的数据流需求是什么。远程同步的重要一点是所有画布绘制命令都是“原子的”。因此,如果要在用户单击时绘制每个点,则必须为每个新点绘制
beginPath、moveTo、lineTo、stroke
。如果你想画一批完整的点,你必须
beginPath,moveTo,multiple lineTo's,stroke
。因此,重要的一点是不要让绘图命令挂起——不要启动在多个套接字事件之间保持打开状态的
beginPath
。这是好的一点。但是,您关于套接字不可靠的评论是不正确的。WebSocket是在TCP而不是UDP之上实现的,因此在连接时100%可靠(让各地twitch游戏开发人员感到懊恼)。看见然而,这种可靠性并不适用于完全断开连接的客户端,这是一个完全不同的问题。@Kal_Torak。感谢您提供关于TCP是websocket协议的信息。我认为正确,TCP是可靠的。我能听听你的想法吗?如果无法建立websocket连接,socket.io是否会回退到轮询(与SignalR一样)?轮询是否同样可靠?如果WebSocket不可用,Socket.io确实会回退到其他方法。更准确地说,与SignalR不同,socket.io实际上是在XHR或JSONP的“回退”状态下启动的,然后升级到WebSocket(如果有)。至于可靠性,我没有足够的经验来说明,因为我在当前项目中只使用了几个月。