我在一个Spring项目中使用Rabbitmq作为消息代理,该项目使用带有STOMP的websocket。我在查看可以有多少个并发Websocket连接(即,有多少个并发的移动和Web用户),我注意到有3个不同的地方会影响该连接:
1)apache tomcat 9配置中的maxConnections。
2)表示要由ulimit -n
检查的文件描述符数量3)服务器计算机允许的端口数(我看到每个新用户打开了与服务器的websocket连接,rabbitmq显示该连接正在使用新端口)。
所以我有点迷茫:
(a)每个websocket实际上是否需要一个专用端口?没有通道概念来利用可用端口上的连接吗?
(b)通道数量与文件描述符数量有关吗?以及我应该设定什么值(我的意思是,一个8核,16 GB RAM的服务器节点可以处理一百万个文件描述符,这意味着一百万个并发Websocket客户端)?
(c)并且最重要的是,如果消息代理对每个客户端使用唯一端口,则前两个配置(maxConnections和文件描述符#)将无关紧要,因为我是在OS上修改TCP后最多只能有6万个TCP端口?
(d)总之,我可以在游戏中拥有最多同时在线玩家的主要因素是什么(我已经在移动和网络应用程序中拥有它了)。
有人可以向我解释整个周期,包括所有前面提到的组件(Web服务器,Web服务器的操作系统,消息代理服务器的操作系统以及消息代理本身)吗?以及cloudamqp之类的服务如何表示它们在单个节点上最多支持16万个并发连接,而我看到每个客户端(应用程序用户)都在保留端口?
非常感谢您提前解释此过程。
答案 0 :(得分:1)
(a)每个websocket实际上是否需要一个专用端口?不在那里 利用可用端口上的连接的通道的概念?
STOMP没有渠道(https://stomp.github.io/stomp-specification-1.2.html)的概念。每个STOMP客户端至少具有一个与其关联的TCP连接。
(b)通道数量与文件描述符数量有关吗? 以及我应该输入什么值(我的意思是单个8个服务器节点可以 核心和16 GB RAM处理一百万个文件描述符,即一百万 并发websocket客户端)?
通道是不与文件描述符关联的AMQP特定资源。 AMQP / STOMP TCP连接 是关联的,每个连接使用一个文件描述符。使用的数量取决于您运行的基准测试,以查看服务器可以处理的内容。
(c)而且最重要的是,如果消息代理使用唯一端口 每个客户端,然后是前两个配置(maxConnections和文件号 描述符)无关紧要,因为我限于大约60K端口 在操作系统上修改后的TCP?
每个TCP连接都由四元组的源IP,源端口,目标IP和目标端口来标识。因此,您不仅限于60K端口。如果所有连接均来自同一IP地址(例如负载平衡器或代理),则可以,因为仅使用一个源IP,您可能会遇到此问题。
(d)总之,最大并发播放器I的主要因素是什么 可以在我的游戏中玩
您只能通过运行模拟实际预期负载的基准来回答此问题。也许您的服务器磁盘速度慢,这可能是“主要因素”。又或者它托管在不可靠的网络上。我建议使用toxiproxy
之类的工具测试您的代码,以模拟可能出问题的地方。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。