有人可以解释如何使用request.js池哈希吗?
在github上的注释说,这大约池:
池-包含这些请求的代理的哈希对象。如果省略,该请求将使用设置为节点的默认maxSockets的全局池。
pool.maxSockets-包含池中最大套接字数量的整数。
我有用于编写CouchDB实例的代码(请注意问号)。基本上,任何连接到我的Node服务器的用户都将彼此独立地写入数据库:
var request = require('request');
request({
//pool:, // ??????????????????
'pool.maxSockets' : 100, // ??????????????????
'method' : 'PUT',
'timeout' : 4000,
'strictSSL' : true,
'auth' : {
'username' : myUsername,
'password' : myPassword
},
'headers' : {
'Content-Type': 'application/json;charset=utf-8',
'Content-Length': myData.length
},
'json' : myData,
'url': myURL
}, function (error, response, body){
if (error == null) {
log('Success: ' + body);
}
else {
log('Error: ' + error);
}
});
什么是高吞吐量/高性能的最佳选择?
'maxSockets'数高的缺点是什么?
如何创建单独的池而不是全局池?为什么只想创建一个单独的池?
请求中的池选项使用的代理http.Agent
与标准HTTP库中的代理相同。请参阅文档http.Agent,看到了agent
期权http.request。
用法
pool = new http.Agent(); //Your pool/agent
http.request({hostname:'localhost', port:80, path:'/', agent:pool});
request({url:"http://www.google.com", pool:pool });
如果您想知道是什么,可以从控制台查看。
{ domain: null,
_events: { free: [Function] },
_maxListeners: 10,
options: {},
requests: {},
sockets: {},
maxSockets: 5,
createConnection: [Function] }
该maxSockets
决定有多少并发套接字代理可以为每个主机开放的,存在于默认值为5.通常,您将之前设置的代理。pool.maxSockets
显式传递将覆盖中的maxSockets属性pool
。仅当通过pool
选项时,此选项才有意义。
如此不同的使用方式:
agent
选项,undefined
将使用http.globalAgent
。默认情况。反向回答您的问题。
池旨在保留程序要使用的一定数量的套接字。首先,套接字被重用于不同的请求。因此,它减少了创建新套接字的开销。其次,它使用较少的套接字来进行请求,但始终如一。它不会占用所有可用的插槽。第三,它维护请求队列。因此,存在等待时间。
池就像缓存和节流阀。如果您有更多的请求和更少的套接字,则油门效果将更加明显。使用全局池时,它可能会限制两个不同客户端的功能,因此无法保证等待时间。为他们拥有单独的资源池对两者都比较公平(请考虑一下,如果一个请求比另一个请求更多)。
maxSockets属性可提供最大的并发性。它提高了整体吞吐量/性能。缺点是油门效果降低。您无法控制峰值开销。将其设置为大数,就像根本没有池。您将开始遇到诸如套接字不可用之类的错误。它不能超过操作系统设置的允许的最大限制。
那么什么是高吞吐量/性能的最佳选择?吞吐量存在物理限制。如果达到限制,响应时间将随着连接数的增加而增加。在此之前,您可以一直增加maxSockets,但是增加之后将无济于事。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句