我可以通过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消息。当然,在丢失数据包和损坏的数据需要重传的现实世界中,这将花费更长的时间。 __
即使非常保守地估计,要向5,000个客户发送10 kB的时间为8秒,在聊天室中每10-20秒就会收到一条消息也可能很好。
实际上,按照重要性的顺序,它归结为几个问题:
- 您的服务器将有多少带宽可用?
- 可以同时连接多少个用户?
- 每分钟将发送多少条消息?
回答完这些问题后,您可以确定基础结构将支持的消息的最大大小。
以上是 我可以通过socket.emit发送多少数据? 的全部内容, 来源链接: utcz.com/qa/409030.html