【问题标题】:Does Socket.io 'combine' packets if sent at nearly the same time?如果几乎同时发送,Socket.io 是否会“组合”数据包?
【发布时间】:2018-12-20 16:07:27
【问题描述】:

例如,如果一个 NodeJS 服务器有以下代码:

socket.emit('msg', { data: 'abc123' });
socket.emit('msg', { data: 'aaaaa' });
socket.emit('another_event', { data: 'ooooo' });
socket.emit('yet_another_event', { data: '555' });

是否总是有 4 个单独的数据包发送到客户端?还是 Socket.io 会尝试将数据包“组合”成一个数据包,然后客户端的 Socket.io 将“分离”单个数据包,以便它们由适当的io.on() 侦听器处理?

【问题讨论】:

  • 连接/打开此节点文件的人将被发送到cross。例如:假设节点 js 运行在 localhost:3000,如果你在一个浏览器的多个标签页中打开,emit 将被广播到所有标签页。
  • 我只是在谈论服务器将这 4 条消息发送到单个客户端

标签: javascript node.js socket.io


【解决方案1】:

我希望我能完全理解你的问题。

socket.io 所做的是“多路复用”这些数据包,这意味着它们都将通过同一通道发送。 由于不同的原因,这些数据包不会同时发送/没有组合在一个数据包中。一,在带宽方面是有风险的。如果您有 5 个每个 50kb 的数据包怎么办?在网络故障或丢包的情况下,您会丢失整个 5 个数据包,而不是 1 个。现在这不是问题,但是如果我们谈论更大大小的数据包,那么它就会成为问题。

根据传输的性质,数据包应该串行传输。您可能会感兴趣的是,这些数据包有时不会以相同的顺序到达,但是它们会通过协议重新组合。在 TCP/IP 的情况下,这些数据包将在转发到应用程序之前重新组合。

您可能想了解connectionless vs connection-oriented 以了解您是否需要发送所有数据包,或者它们可以单独发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多