javascript - 在 socket.io 上发送许多小数据包或一个大数据包是否存在相关差异?

标签 javascript html tcp socket.io

使用 socket.io,我有两个选择。我可以发送许多小数据包,例如:

socket.emit("data",{515:{x:5,y:6}})
socket.emit("data",{124:{x:3,y:2}})
socket.emit("data",{415:{x:1,y:2}})
socket.emit("data",{135:{x:5,y:1}})

或者我可以发送一个大包:

socket.emit("data",{515:{x:5,y:6},124:{x:3,y:2},415:{x:1,y:2},135:{x:5,y:1}})

考虑到这些数据包每秒发送多次,并且包含对 ping 敏感的应用程序服务器的大部分带宽使用,这两种方法有区别吗?

最佳答案

我相信以下链接可以很好地解释数据包的生命周期:

http://www.sdsusa.com/connections/

显而易见的是,对于一个数据包,所有状态(连接、确认、建立、发送等)都发生一次,而不是发送多个数据包,这些状态必须在每个数据包发生一次。更多的数据包很可能会导致更长的发送/接收时间,同时需要建立更多的连接,并且丢包和丢失连接的可能性更大,从而导致额外的延迟。

很可能您采用哪种方法都无关紧要,因为差异可能只有几毫秒且不易察觉。话虽这么说,如果您有来自许多客户端的许多数据包,那么您的服务器可能会在尝试每秒处理 30 或 40 个数据包时被淹没。此外,如果您关心订单,那么许多数据包将是不可取的,因为无法保证您的数据包到达的顺序。

关于javascript - 在 socket.io 上发送许多小数据包或一个大数据包是否存在相关差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387516/

相关文章:

javascript - 如何找出 React Native 中的错误和位置

javascript - JS在对象值中搜索

javascript - 如何基于另一个数组中的值过滤对象数组

javascript - 在 IE11 中查找文本范围的起始位置

html - 不可见的 HTML 表单

google-app-engine - Google App Engine、Amazon EC2 和套接字

javascript - 视网膜图像文件的 anchor 链接( anchor 标记的 srcset)

javascript - 滚动后如何更改导航栏的颜色

windows - 改进 UDP 消息处理

c# - tcp/ip 客户端服务器无法通过互联网工作