用于节点js连接管理的AWS-SDK

时间:2016-10-11 03:59:00

标签: node.js amazon-web-services amazon-s3 aws-sdk

节点j的aws-sdk是否通过内部池管理它的连接?

他们的文件让我相信这一点。

  

httpOptions(map) - 一组传递给低级HTTP的选项   请求。目前支持的选项包括:

     

proxy [String] - 代理请求的URL [http.Agent,   https.Agent] - 用于执行HTTP请求的Agent对象。用过的   用于连接池。默认为全局代理   (http.globalAgent)用于非SSL连接。请注意,对于SSL   连接,使用特殊的Agent对象以启用对等体   证书验证。此功能仅适用于   Node.js环境。

但是我没办法,至少没有找到,我可以定义任何连接池属性。

如果我想控制正在使用的并发连接,我有哪些选择?

让SDK处理它会更好吗?

2 个答案:

答案 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模块,defaultSocketCountINFINITY

他们正在使用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的答案。

现在可以同时为httphttps设置代理。您可以通过在从http切换到https时更新配置来解决此问题,反之亦然。

请参阅:https://github.com/aws/aws-sdk-js/issues/1185