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

node.js http服务器:如何获取挂起的套接字连接?,node.js,sockets,http,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; serve

在基本节点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个)

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

编辑

查看节点http,有一个名为
连接
的事件,因此我认为请求的往返如下所示:

  • 客户端连接到服务器套接字-->三向握手,套接字持续处于连接状态(或建立状态),然后在节点事件中发出连接
  • 节点http服务器接受此挂起连接,然后通过发出
    request
  • 因此,连接的数量必须至少与请求的数量一样大,但通过以下示例,我无法确认这一点:

    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高,这怎么可能呢?

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

    这是一个好的观点。所以我需要知道当前接受队列有多大。据我所知,客户端连接到服务器套接字,完成三方握手,然后,套接字保持状态
    SYN_RECV
    ,直到应用层(http服务器)接受此套接字来处理请求,还是我错了?我有疑问,因为如果我连续阅读
    netstat-an
    ,几乎没有问题(或至少1-2)
    SYN_RECV
    。是否可能,只要应用层没有接受,套接字就处于连接状态呢?因为在http中(除了
    保持活动状态
    选项),每个请求都=新套接字。