cbm*_*eks 29 node.js socket.io
所以我使用的是node.js和socket.io.我有这个小程序,它获取文本框的内容并将其发送到node.js服务器.然后,服务器将其中继回其他连接的客户端.有点像聊天服务但不完全一样.
无论如何,如果用户输入2-10k的文本并尝试发送该怎么办?我知道我可以尝试一下并亲自看看,但我正在寻找一个实际的,最佳实践限制我可以通过发射做多少数据.
jos*_*736 74
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秒会有一条消息.
所以真的,它归结为几个问题,按重要性顺序排列:
回答这些问题后,您可以确定基础架构支持的邮件的最大大小.
限制 = 1M(默认)
使用此示例配置指定maxHttpBufferSize的自定义限制:
const io = require("socket.io")(server, {
maxHttpBufferSize: 1e8, pingTimeout: 60000
});
Run Code Online (Sandbox Code Playgroud)
从Socket.IO 文档中阅读更多内容
经过这些设置,如果您的问题仍然存在,那么您可以检查相关的代理Web服务器配置,例如nginx中的 client_max_body_size、 limit_rate(如果您有与socketIO应用程序相关的http代理)或客户端/服务器防火墙规则。
| 归档时间: |
|
| 查看次数: |
16155 次 |
| 最近记录: |