【问题标题】:Possible to simulate several concurrent connections to test a nodejs app可以模拟多个并发连接来测试 nodejs 应用程序
【发布时间】:2013-05-24 11:49:23
【问题描述】:

我有一个运行 @localhost 的简单 node.js /socket.io (websockets) 应用程序。我想看看它可以处理多少并发连接。是否可以在 localhost 本身上模拟多个并发用户?

这是我使用 socket.io-client 的半生不熟的尝试:

function connectAndSend(){
    socket.emit('qand',{
        code :'ubuntu'
    });
} 
socket.on('connect', function () {
});
socket.on('q', function (data) {
    console.log(data);
});

function callConnect(){
    console.log('calling');
    connectAndSend() ;
    setTimeout(callConnect,100) ;
}

callConnect() ;

在我看来,这只是每 100 毫秒“发出”一条新消息,而不是模拟并发连接。

【问题讨论】:

  • 我猜是无限的。在浏览器中打开多个标签

标签: node.js websocket socket.io localhost


【解决方案1】:

在这里查看:

Long connections with Node.js, how to reduce memory usage and prevent memory leak? Also related with V8 and webkit-devtools

特别是 - 上述问题作者使用的测试程序

编辑

您可以使用以下工具来检查您的服务器每秒能够处理多少个请求

  1. ab - http://httpd.apache.org/docs/2.2/programs/ab.html

  2. 围攻 - http://www.joedog.org/siege-home/

【讨论】:

  • 你的意思是使用 webkit-devtools-agent 吗?
  • webkit-devtools-agent 是一个分析工具。用具体例子更新了答案。
【解决方案2】:

在调用connect 时,您必须告诉socket.io 为每次调用connect 创建一个新连接。例如:

var socket = io.connect(server, { "force new connection": true });

另外,如果您想提高出站 TCP 连接限制(似乎默认为每个目标 5 个连接),请执行类似

require('http').globalAgent.maxSockets = 1000;

在连接之前。

但请注意,快速创建和关闭 tcp 套接字会使 TCP 连接堆积在TIME_WAIT 状态,并且取决于您的OS and your network settings,您很快就会达到限制,这意味着您将不得不等待在您建立新连接之前,那些旧套接字会超时。 如果我没记错的话,Windows(Server 2008 R2 和 Windows 7)上的限制大约是 16k 连接(每个目标 ip/端口组合),Windows 中默认的 TIME_WAIT 超时为 4 分钟,所以如果您创建的时间超过在 Windows 上 4 分钟内 16k 连接,你可能会碰壁。

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2011-12-16
    相关资源
    最近更新 更多