可以模拟几个并发连接来测试nodejs app

时间:2013-05-29 09:25:07

标签: node.js websocket socket.io localhost

我有一个运行@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毫秒发送一条新消息,并且不会模拟并发连接。

2 个答案:

答案 0 :(得分:5)

在致电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上的限制是大约16k连接(每个目标ip / port组合)(Server 2008 R2和Windows 7),Windows中的默认TIME_WAIT超时是4分钟,所以如果你创建在Windows上4分钟内超过16k连接,你可能会碰壁。

答案 1 :(得分: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/