栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

5个对远程站点的请求后,node.js http.get挂起

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

5个对远程站点的请求后,node.js http.get挂起

这是 “恰好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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号