这是 “恰好5”
的原因:https
:
//nodejs.org/docs/v0.10.36/api/http.html#http_agent_maxsockets
在内部,
http模块使用代理类来管理HTTP请求。默认情况下,该代理将允许最多5个打开连接到同一HTTP服务器。
在您的代码中,您不会消耗Google发送的实际响应。因此,该代理假定您尚未完成请求,并将保持连接打开状态。因此,在5个请求之后,该代理将不再允许您创建新连接,并且将开始等待任何现有连接完成。
显而易见的解决方案是仅使用数据:
http.get("http://www.google.com", function(r){ r.on('data', function() { }); ...});如果您遇到
/api/internetcheck路由被调用过多的问题,因此您需要允许5个以上的并发连接,则可以增大连接池的大小,或者完全禁用该代理(尽管您仍然需要消耗两种情况下的数据);
// increase pool sizehttp.globalAgent.maxSockets = 100;// disable agenthttp.get({ hostname : 'www.google.com', path : '/', agent : false }, ...)或使用
HEAD请求代替
GET。
(PS:万一
http.get产生错误,您仍应使用
res.end()或类似方法结束HTTP响应)。
注意 :在Node.js版本> =
0.11中,
maxSockets设置为
Infinity。



