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

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

无论如何,如果用户input2-10k的文本并尝试发送该文本呢? 我知道我可以尝试一下,看看自己,但我正在寻找一个实际的,最佳实践的限制,我可以通过排放多less数据。

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

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

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

10.4 kB * 5000客户端= 50.8 MB。

在一个100 Mbps的链路上, 如果你能够饱和链路,你需要花费4.3秒的理论最小时间来向5,000个客户端发送一个10KB的消息。 当然,在丢包和损坏的数据需要重传的现实世界中,这将花费更长的时间。

即使用8秒的非常保守的估计来发送10kB到5000个客户端,在聊天室中每隔10-20秒发送一个消息也是可以的。

所以真的,这个问题归结为几个重要的问题:

  1. 你的服务器有多less带宽?
  2. 将有多less用户同时连接?
  3. 每分钟发送多less条消息?

通过回答这些问题,您可以确定您的基础架构将支持的最大消息大小。

2-10k没问题,没有任何强制性的限制或者任何东西,它只是归结为带宽和实用性。尽pipe在事物的macros伟计划中,10k是小的,所以如果这对你有一个上限。