微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – Nodejs Max Socket Pooling设置

所以,我试图优化我的节点应用程序,我的应用程序发出HTTP和HTTPS请求.

LinkedIn的这篇文章中,为了使节点快速,建议禁用套接字池来消除5个套接字的限制:

// disable socket pooling
var http = require('http');
var options = {.....};
options.agent = false;
var req = http.request(options)

现在,从Mike(GateHub的请求开发人员)开始,他建议:

require('http').globalAgent.maxSockets = Infinity

公平地说,他不建议无穷大,但你可以在那里给予任何合理的价值.

现在,我的应用使用http和https,所以我用这个代码

var http = require('http');
http.globalAgent.maxSockets = 30;
var https = require('https');
https.globalAgent.maxSockets = 30;

当我这样做,我得到这个错误

TypeError: Cannot set property ‘maxSockets’ of undefined

最后,在查看HTTP文档时,它不会显示“globalAgent”,而是仅显示agent.maxSockets.

所以,我想知道第一,覆盖这个参数的最佳语法是什么?

二,什么是最优值?是否基于我的服务器内存量?它的带宽?

解决方法

对于你所得到的TypeError,当设置http.globalAgent.maxSockets或https.globalAgent.maxSockets时,我不会收到任何错误.您的应用程式中还有其他事项.

关于您的问题的第一部分,意识到您不仅限于使用全球代理.您可以创建自己的代理实例并使用它来提出请求:

var http = require('http');
var myAgent = new http.Agent();

http.request({ ...,agent: myAgent },...);

使用自定义代理进行的请求根本不与全局代理进行交互.如果没有明确指定一个或选择不使用代理(通过将false作为请求选项中的代理值传递),则全局代理只是认的代理.

所以当docs表示agent.maxSockets时,他们确实是指通用Agent类;每个实例都具有该属性,包括全局(认)代理 – 您必须通过httpglobalAgent访问.

你的问题的第二部分(最佳maxSockets)是一个很难回答的问题.请记住,许多服务器将限制来自给定IP的并发连接数,并且您希望确保不会淹没具有大量并发请求的服务器. (一旦发出足够的请求,您就可以DOS服务器.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐