這樣的基本節點的http服務器上:node.js 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的底層套接字來獲取此信息,但直到現在我無法得到它。
EDIT
看着節點-HTTP有稱爲connection
一個事件,所以我認爲一個請求的往返如下:
- 客戶端連接到服務器套接字 - > 3套接字持續處於狀態
CONNECTED
(或ESTABLISHED
?!),則在節點事件中發出connection
。 - 節點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高,這怎麼可能?
好點。所以我需要知道當前接受隊列有多大。據我瞭解,一個客戶端連接到服務器套接字,3-way握手完成,然後,套接字持續狀態'SYN_RECV',直到應用層(http服務器)接受此套接字來處理請求,或者我錯了? – chris
我有疑惑,因爲如果我連續閱讀'netstat -an',幾乎沒有(或至少1-2)'SYN_RECV'。只要應用層沒有接受它,套接字是否處於'CONNECTED'狀態?在http中引起(除'keep-alive'選項外)每個請求=新套接字。 – chris