所以,我正在尝试优化我的节点应用程序,我的应用程序发出HTTP和HTTPS请求.
从LinkedIn的这篇文章中获取节点的速度,它建议禁用套接字池来删除5个套接字的限制:
// Disable socket pooling
var http = require('http');
var options = {.....};
options.agent = false;
var req = http.request(options)
Run Code Online (Sandbox Code Playgroud)
现在来自GitHub的Mikeal(Request的开发者),他建议:
require('http').globalAgent.maxSockets = Infinity
Run Code Online (Sandbox Code Playgroud)
公平地说,他并不暗示无限,但你可以在那里提出任何合理的价值.
现在,我的应用程序使用http和https,所以我使用了这段代码:
var http = require('http');
http.globalAgent.maxSockets = 30;
var https = require('https');
https.globalAgent.maxSockets = 30;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到此错误:
TypeError:无法设置未定义的属性'maxSockets'
最后,在查看HTTP文档时,它不显示"globalAgent",而是仅显示agent.maxSockets.
所以,我首先想知道,覆盖此参数的最佳语法是什么?
第二,什么是最优值?它是基于我的服务器有多少内存?它的带宽?
jos*_*736 14
在关于TypeError你得到,要么设置的时候我没有得到任何错误http.globalAgent.maxSockets或https.globalAgent.maxSockets.你的应用程序还有其他功能.
关于问题的第一部分,请注意您不仅限于使用全局代理.您可以创建自己的Agent实例并使用它来发出请求:
var http = require('http');
var myAgent = new http.Agent();
http.request({ ... , agent: myAgent }, ...);
Run Code Online (Sandbox Code Playgroud)
使用自定义代理进行的请求根本不与全局代理进行交互.如果您没有明确指定一个或选择不使用代理(通过false作为agent请求选项中的值传递),则全局代理只是默认使用的代理.
因此,当文档说agent.maxSockets,他们真的是指泛Agent类; 每个实例都有该属性,包括您必须访问的全局(默认)代理http.globalAgent.
问题的第二部分(最优maxSockets)是一个难以回答的问题.请记住,许多服务器将限制来自给定IP的并发连接数,并且您希望确保不会使具有大量并发请求的服务器瘫痪.(如果有足够的请求立即启动,那么你就是在服务器上.)
| 归档时间: |
|
| 查看次数: |
21310 次 |
| 最近记录: |