node.js http服务器:如何获取挂起的套接字连接?

时间:2014-04-19 15:28:11

标签: node.js sockets http

在基本节点http服务器上,如下所示:

var http = require('http');

var server = http.createServer(function(req, res){

  console.log("number of concurr. connections: " + this.getConnections());
  //var pendingConnections = ???

});

server.maxConnections = 500;

server.listen(4000);

如果我一次向服务器发送500个请求,则为concurr。连接是350.硬限制设置为500(net.server.backlog),我想知道,当新请求开始时,如何访问待处理连接的数量(在此示例中最多为150)。 / p>

所以我想我必须访问在端口4000上监听的底层套接字才能获得此信息,但直到现在我还是无法获得它。

修改

查看node-http有一个名为connection的事件,所以我认为请求的往返如下:

  1. 客户端连接到服务器套接字 - > 3路握手,套接字持续处于状态CONNECTED(或ESTABLISHED?!),然后在节点事件connection中发出。
  2. 节点http服务器接受此挂起连接,并通过发出request
  3. 开始处理请求

    因此连接数必须至少与请求数一样大,但是通过以下示例我无法确认:

    var http = require('http');
    
    var activeRequets = 0;
    var activeConnections = 0;
    
    var server = http.createServer(function(req, res){
    
        activeRequests++;
        res.send("foo");
    
    });
    
    server.on('connection', function (socket) {
    
        socket.setKeepAlive(false);
        activeConnections++;
    
    });
    
    setInterval(function(){
    
        console.log("activeConns: " + activeConnections + " activeRequests: " + activeRequests);
        activeRequests = 0;
        activeConnections = 0;
    
    }, 500);
    
    server.maxConnections = 1024;
    server.listen(4000, '127.0.0.1');
    

    即使我强调服务器具有1000个concurr连接并在响应中添加一个延迟,activeRequests也大多与activeConnections一样高。更糟糕的是,activeRequests通常高于activeconnections,这怎么可能呢?

1 个答案:

答案 0 :(得分:0)

IIRC您可以只计算您正在侦听的特定IP和端口的状态为SYN_RECV的连接数。是否使用子进程为该信息执行netstat和grep(或类似的实用程序),或使用* nix C API编写绑定以获取此信息,由您自己决定。