实测http.request的keep-alive无效
利用http.Agent保持http连接,以便重用,但是实测每次都重新建立新连接,代码如下:
var http = require('http');
var agent = new http.Agent();
agent.maxSockets = 2;//设置最大两个连接
var options = {
hostname: 'www.baidu.com',
path: '/img/bd_logo1.png',
agent: agent,
headers: {'Connection': 'keep-alive'}
};
function reqBaidu(){
var req = http.get(options, function(res) {
console.log("Got response: " + res.statusCode);
});
}
reqBaidu();//运行结果:Got response: 200
setTimeout(reqBaidu, 100);//运行结果:Got response: 200
setTimeout(reqBaidu, 4000);//运行结果:等了很久(60多秒)才出结果Got response: 200,难道连接池中的两个socket被占用了?
使用Microsoft Network Monitor 3.4查看tcp连接情况如下,三次http请求都使用了新的socket,这是为什么呢,或许是我分析错了,还请指正。
4 回复
0.10 的 keepalive 有问题,0.11 据说修复了,0.12 遥遥无期。
楼主竟然玩得懂这个,那可以看看这个 keep-alive 模块:https://github.com/node-modules/agentkeepalive 。@fengmk2 写的。paypal 推荐过。
@alsotang 辛苦了,这么晚了还在回帖子。我去看看。
楼主分析的好细致,学习了
0.10 的 http agent 需要有请求排队的情况才会出现keepalive,如果没有排队请求,会马上断开socket连接。