我可以通过socket.emit发送多少数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以通过socket.emit发送多少数据?相关的知识,希望对你有一定的参考价值。

所以我使用的是node.js和socket.io。我有这个小程序,它获取文本框的内容并将其发送到node.js服务器。然后,服务器将其中继回其他连接的客户端。有点像聊天服务但不完全一样。

无论如何,如果用户输入2-10k的文本并尝试发送该怎么办?我知道我可以尝试一下并亲自看看,但我正在寻找一个实际的,最佳实践限制我可以通过发射做多少数据。

答案

Node和socket.io没有任何内置限制。您需要担心的是消息大小,每秒发送的消息数,连接的客户端数量以及服务器可用带宽之间的关系 - 换句话说,没有简单的答案。

我们考虑一个10 kB的消息。当连接10个客户端时,这相当于服务器必须推出的100 kB数据,这是完全合理的。添加更多客户端,事情变得更加苛刻:10 kB * 5,000客户端= 50 MB。

当然,您还必须考虑协议开销的数量:每个数据包,TCP增加~20个字节,IP增加20个字节,以太网增加14个字节,总共54个字节。假设MTU为1500字节,您将看到每个客户端8个数据包(忽略重新传输)。这意味着您将通过线路发送每个客户端8 * 54 = 432字节的开销+ 10 kB有效负载= 10,672字节。

10.4 kB * 5000客户端= 50.8 MB。

在100 Mbps链路上,如果您能够使链路饱和,那么您正在寻找理论上至少4.3秒的时间来向5,000个客户端发送10 kB消息。当然,在丢包的现实世界和需要重传的损坏数据中,需要更长的时间。

即使有一个非常保守的估计8秒发送10 kB到5,000个客户端,这在聊天室里可能很好,每隔10-20秒会有一条消息。

所以真的,它归结为几个问题,按重要性顺序排列:

  1. 您的服务器可用多少带宽?
  2. 将同时连接多少用户?
  3. 每分钟会发送多少条消息?

回答这些问题后,您可以确定基础架构支持的邮件的最大大小。

另一答案

2-10k很好,没有任何强制限制或任何东西,它只是带宽和实用性.10k虽然在宏观方案中很小,所以你应该没事,如果这对你来说有点上限。

以上是关于我可以通过socket.emit发送多少数据?的主要内容,如果未能解决你的问题,请参考以下文章

如果几乎同时发送Socket.io'组合'数据包吗?

Node.js 到 C++ 客户端:未从 socket.emit 接收消息

socket中 emit和on的写法

Socket.emit 不发送或 socket.on 不接收?

NESTJS 网关/Websocket - 如何通过 socket.emit 发送 jwt access_token

c# SocketIoClientDotNet, node js socket.IO