【发布时间】: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" 到 Connector 和 Executor 但结果是一样的。
在 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