这样的基本节点的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