4

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

4

2 回答 2

6

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

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

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

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

在连接之前。

但请注意,快速创建和关闭 tcp 套接字会使 TCP 连接堆积在状态TIME_WAIT,并且根据您的操作系统和网络设置,您很快就会达到限制,这意味着您必须等待那些旧套接字建立新连接之前超时。如果我没记错的话,Windows(Server 2008 R2 和 Windows 7)上的限制大约是 16k 连接(每个目标 ip/端口组合),Windows 中的默认TIME_WAIT超时时间是 4 分钟,所以如果您在在 Windows 上 4 分钟,你可能会碰壁。

于 2013-06-04T09:15:21.787 回答
1

在这里检查:

与Node.js长连接,如何减少内存使用和防止内存泄漏?也与 V8 和 webkit-devtools 相关

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

编辑

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

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

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

于 2013-05-29T09:30:07.763 回答