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服务器.)

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...