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

时间:2012-10-19 15:38:16

标签: node.js socket.io

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

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

2 个答案:

答案 0 :(得分:70)

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消息如果您能够饱和链接。当然,在丢包的现实世界和需要重传的损坏数据中,需要更长的时间。

即使非常保守地估计发送10 kB到5,000个客户端的时间为8秒,但在聊天室中可能会很好,每隔10-20秒就会收到一条消息。

实际上,按照重要性的顺序,它归结为几个问题:

  1. 您的服务器可用多少带宽?
  2. 将同时连接多少用户?
  3. 每分钟会发送多少条消息?
  4. 通过回答这些问题,您可以确定基础架构支持的邮件的最大大小。

答案 1 :(得分:2)

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