节点j的aws-sdk是否通过内部池管理它的连接?
他们的文件让我相信这一点。
httpOptions(map) - 一组传递给低级HTTP的选项 请求。目前支持的选项包括:
proxy [String] - 代理请求的URL [http.Agent, https.Agent] - 用于执行HTTP请求的Agent对象。用过的 用于连接池。默认为全局代理 (http.globalAgent)用于非SSL连接。请注意,对于SSL 连接,使用特殊的Agent对象以启用对等体 证书验证。此功能仅适用于 Node.js环境。
但是我没办法,至少没有找到,我可以定义任何连接池属性。
如果我想控制正在使用的并发连接,我有哪些选择?
让SDK处理它会更好吗?
答案 0 :(得分:3)
可以为http.Agent提供您想要的最大套接字设置。
var AWS = require('aws-sdk');
var http = require('http');
AWS.config.update({
httpOptions: {
agent: new http.Agent(...)
}
})
答案 1 :(得分:1)
我一直在研究这个问题。
我挖了一下,想出了正在使用的默认值。
AWS-SDK正在使用节点http
模块,defaultSocketCount
为INFINITY
。
他们正在使用https
模块maxSocketCount
50
。{/ p>
相关的代码段。
sslAgent: function sslAgent() {
var https = require('https');
if (!AWS.NodeHttpClient.sslAgent) {
AWS.NodeHttpClient.sslAgent = new https.Agent({rejectUnauthorized: true});
AWS.NodeHttpClient.sslAgent.setMaxListeners(0);
// delegate maxSockets to globalAgent, set a default limit of 50 if current value is Infinity.
// Users can bypass this default by supplying their own Agent as part of SDK configuration.
Object.defineProperty(AWS.NodeHttpClient.sslAgent, 'maxSockets', {
enumerable: true,
get: function() {
var defaultMaxSockets = 50;
var globalAgent = https.globalAgent;
if (globalAgent && globalAgent.maxSockets !== Infinity && typeof globalAgent.maxSockets === 'number') {
return globalAgent.maxSockets;
}
return defaultMaxSockets;
}
});
}
return AWS.NodeHttpClient.sslAgent;
}
有关操纵套接字计数的信息,请参阅BretzL的答案。
现在可以同时为http
和https
设置代理。您可以通过在从http
切换到https
时更新配置来解决此问题,反之亦然。