【问题标题】:Websocket allows only 200 connectionsWebsocket 只允许 200 个连接
【发布时间】:2014-07-22 13:44:00
【问题描述】:

我刚刚在我的服务器上实现了一个简单的 Websocket 系统。我正在尝试测试最大连接数,我编写了以下代码:

Javascript:

for(var i=0; i<300; i++){
    websocket();
}

function websocket() {
    var wsUri = "ws://" + document.location.host + document.location.pathname + "websocket";
    var ws = new WebSocket(wsUri);
    ws.onopen = function () { ws.send("User connected"); };
    ws.onmessage = function (e) { writeToPage(e.data); };
    ws.onclose = function () { writeToPage("User disconnected"); };
}

每次我运行它时,前 200 个用户都会连接,之后,所有请求都会调用它们的 onclose()。在 Web 控制台中,我收到以下错误:

Mozilla: 加载页面时与 ws://localhost:8080/MyApp/websocket 的连接中断

Chrome: WebSocket 握手期间出错:“连接”标头值不是“升级”:升级关闭

我的 Web 应用程序部署在 Tomcat 7.0.52。我读到默认情况下它只允许 200 个线程,所以我在 conf/server.xml 中添加了 maxThreads="1000"ConnectorExecutor 但结果是一样的。

web.xml 我添加了:

<context-param>
    <param-name>org.apache.tomcat.websocket.executorMaxSize</param-name>
    <param-value>1000</param-value>
</context-param>

我尝试使用 ws://echo.websocket.org 打开 300 个 websocket,但仍然只有 200 个有效。

这是我的服务器允许的最大连接数吗? 这是我可以作为客户端创建的最大 websocket 数量吗? 这是测试重负载的好方法吗? 如何增加数量?

【问题讨论】:

  • 您还应该测试如果您有两台机器分别创建 101 个连接会发生什么。根据“header value is not 'Upgrade'”,我猜测问题可能出在服务器上,可能是由于特定于配置的限制或服务器资源限制。 (我猜更可能是配置限制,因为它甚至会停止在 200 个。)无论哪种方式,我们都需要有关您的服务器的更多信息。
  • 如您所说,我在两台客户端机器上对其进行了测试,第二台机器的最后 2 个用户无法连接。所以我猜你对服务器配置是正确的

标签: javascript websocket


【解决方案1】:

经过大量研究,我发现maxThreads="1000" 确实解决了这个问题,但是 Mozilla 只允许 200 个套接字。所以我不得不从多台客户端机器上再次测试。

FireFox 中允许的默认最大 websocket 连接数是 200. 来源:https://developer.mozilla.org/en/docs/WebSockets#Gecko_7.0

【讨论】:

  • 你能详细描述一下你在哪里配置maxThreads="1000",我也有同样的问题,当时只能打开200个连接,不是客户端问题,我用不同的客户端测试过,所以我怎样才能让我的服务器从更多连接打开
  • @U2Answer 在文件apache-tomcat/conf/server.xml,标签&lt;Connector /&gt; 和值maxThread="1000"
【解决方案2】:

Tomcat 7 中有默认限制。 尝试设置org.apache.tomcat.websocket.executorMaxSize 属性。 见http://tomcat.apache.org/tomcat-7.0-doc/web-socket-howto.html#Tomcat_WebSocket_specific_configuration

【讨论】:

  • 我试过了,但结果一样,或者我做的不对。我相应地编辑了我的问题。
【解决方案3】:

我们在 WCF 服务和 Web Socket 之间收到此错误。它只接受 200 个连接。比我们的团队添加配置文件这个设置。

  <serviceThrottling 
    maxConcurrentCalls="1000" 
    maxConcurrentSessions="1000" 
    maxConcurrentInstances="1000"
  />

https://www.c-sharpcorner.com/blogs/throttling-in-wcf https://www.codeproject.com/Articles/33362/WCF-Throttling

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多