当多个客户端同时访问同一个websocket服务器时会发生什么情况?

当多个客户端同时访问同一个websocket服务器时会发生什么情况?,websocket,Websocket,我使用构建了一个简单的websocket服务器。 我还用HTML+Javascript构建了一个客户端。它运行良好,我想向公众开放 由于我是websocket新手,我不确定当许多人同时访问websocket服务器时会发生什么: websocket服务器是否保留传入请求队列并按顺序处理它们 如果是这样,websocket客户端(Javascript中的标准客户端)是无限期地等待回复,还是超时 例如,如果200个用户同时访问HTML页面,并且每个请求需要1秒的时间来处理,那么第200个用户将看到

我使用构建了一个简单的websocket服务器。 我还用HTML+Javascript构建了一个客户端。它运行良好,我想向公众开放

由于我是websocket新手,我不确定当许多人同时访问websocket服务器时会发生什么:

  • websocket服务器是否保留传入请求队列并按顺序处理它们
  • 如果是这样,websocket客户端(Javascript中的标准客户端)是无限期地等待回复,还是超时
例如,如果200个用户同时访问HTML页面,并且每个请求需要1秒的时间来处理,那么第200个用户将看到什么?他会仅仅等待200秒,然后看到通常的回复吗

第200位用户将看到什么?他会等200秒,然后看到通常的回答吗

当然不是。即使在HTTP示例中,服务器通常也可以同时处理一些请求。可以同时回复的请求数量实际上取决于很多因素,特别是您的web服务器(或应用程序服务器)配置。因为每个请求通常都有一个线程,所以它们不会等待对方结束。除非线程池中连接的线程太多,否则Web服务器必须等待应答并关闭一个线程,才能开始处理下一个请求

只有WebSocket有一点不同。与HTTP不同,HTTP是无状态的,并且在发送响应后连接立即关闭,WebSocket保持活动状态以与服务器交互。所以,如果每个套接字都有一个线程,应用服务器仍然可以同时处理它们的请求和响应。但最大的问题是线程池的大小

如果有太多的活动连接,通常无法建立新连接,因为池已满,并且与HTTP不同,可能很快就没有新连接的开放空间。这种情况下,应用服务器通常通过不接受新连接来处理

要解决这个问题,您必须有足够的资源,并且应该找到合适的配置来处理所需的任意多个并发连接。我不是python开发人员,但在Java和Tomcat应用服务器中,这通常是通过正确的配置来完成的,该配置会增加应用服务器线程池的大小。您必须在所使用的任何应用程序服务器中找到相同类型的配置

更新 为了回答评论中的问题,我添加了此更新


因此,假设池中有10个线程和11个用户,第11个用户在尝试连接时会看到什么

如果最大会话池大小为10,则通常无法进行第11次连接。根据应用服务器的不同,可能会出现以下情况之一

  • 连接一直等待连接,直到达到连接超时
  • 服务器立即删除带有某些状态代码的新连接。有时状态代码可能是
    503服务不可用
  • 它很少见,但服务器甚至可能从池中删除一些活动或空闲连接并接受新连接

因此,假设池中有10个线程和11个用户,第11个用户在尝试连接时会看到什么?