实测http.request的keep-alive无效
发布于 10 年前 作者 llj1985 7252 次浏览 最后一次编辑是 8 年前 来自 分享

利用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,这是为什么呢,或许是我分析错了,还请指正。 捕获.PNG

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连接。

回到顶部