【发布时间】:2017-04-07 11:44:11
【问题描述】:
我正在使用socket.io 制作一个在线白板应用程序,只是为了好玩和学习,我正在尝试在绘图工具的这两个选项之间做出决定:
1) 等待大约 20 个点(或直到 mouseup),然后通过网络一次性发送该点数组。对客户端的影响是他们只会看到每 20 点左右更新一次的线路路径。
2) 将每个点作为数据包绘制后立即发送。这将导致发送大约 20 倍的数据包,但所有客户端都会立即响应。
我不确定哪个选项更好。我担心如果我选择第二个选项,服务器将被所有点数据包负担过重,但理想情况下它会更好,因为它会响应迅速并且看起来很漂亮,但我不确定它是否可行正在考虑需要来回发送的数据包数量。
【问题讨论】:
-
您对服务器过载的担忧完全属于过早优化的范畴;一个黑暗而危险的地方。我强烈建议您尝试尽可能地响应,如果您发现大量性能问题,那么请考虑限制。特别是因为您的数据包很小。而且您的用户量很低。这是为了乐趣和学习。服务器功能强大。宽带无处不在。
-
让您的设计需求决定您的数据流需求。远程同步的重点是所有画布绘图命令都是“原子的”。因此,如果您想在用户单击时绘制每个点,您必须为每个新点
beginPath, moveTo, lineTo, stroke。如果你想画一批完整的点,你必须beginPath, moveTo, multiple lineTo's, stroke。所以重要的一点是不要让你的绘图命令挂起——不要启动一个在多个套接字事件之间保持打开状态的beginPath。 -
@Kal_Torak。感谢您提供有关 TCP 是 websocket 协议的信息。我的立场是正确的,TCP 是可靠的。我可以挑选你的大脑吗?如果无法建立 websocket 连接,socket.io 是否会退回到轮询(就像 SignalR 一样)?投票同样可靠吗?
-
如果 websocket 不可用,Socket.io 确实会回退到其他方法。更准确地说,与 SignalR 不同的是,socket.io 实际上开始处于 XHR 或 JSONP 的“回退”状态,然后 升级 到 websocket(如果它们可用)。至于可靠性,我没有足够的经验可以说,因为我在当前项目中只使用了几个月。
标签: javascript node.js sockets canvas socket.io