【问题标题】:Send one big packet or many smaller packets for whiteboard app?为白板应用程序发送一个大包还是多个小包?
【发布时间】: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
  • 好点。但是,您关于套接字不可靠的评论是不正确的。 WebSockets 是在 TCP 之上实现的,而不是 UDP,因此在连接时是 100% 可靠的(让世界各地的 twitch 游戏开发人员感到懊恼)。见,WebSocketRFC spec。但是,这种可靠性并没有扩展到客户端完全断开连接本身,这完全是一个不同的问题。
  • @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


【解决方案1】:

即使您发送每个单独的鼠标移动,也不一定意味着每个移动都会通过网络传输一个数据包。 WebSocket 层会缓冲数据,然后决定何时传输。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多