簡體   English   中英

node.js http服務器:如何獲取掛起的套接字連接?

[英]node.js http server: how to get pending socket connections?

在基本節點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個請求,則並發數。 連接數是arround350。硬限制設置為500(也有net.server.backlog ),我想知道,當新請求開始時,如何訪問掛起的連接數(在此示例中為150)。

所以我認為我必須訪問偵聽端口4000的基礎套接字以獲取此信息,但是直到現在我仍然無法獲取它。

編輯

看着node-http有一個名為connection的事件,所以我認為請求的往返如下:

  1. 客戶端連接到服務器套接字-> 3向握手,套接字在狀態CONNECTED (或ESTABLISHED )下持續,然后在節點事件中發出connection
  2. 節點http服務器接受此掛起的連接,並通過發出request開始處理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個並發連接並在響應中增加一個延遲, activeRequests還是與activeConnections一樣高。 更糟糕的是,activeRequests通常比activeconnections高,這怎么可能?

IIRC您可以僅對正在監聽的特定IP和端口計數多少個狀態為SYN_RECV的連接。 是否使用子進程對該信息執行netstat和grep(或類似的實用程序),還是使用* nix C API編寫綁定以獲取此信息,都取決於您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM