2016-10-11 54 views
0

節點js的aws-sdk是否通過內部池管理它的連接?用於節點js連接管理的AWS-SDK

他們的文檔有點讓我相信。

httpOptions(map) - 一組選項可傳遞給低層HTTP 請求。目前支持的選項有:

proxy [String] - 通過代理[http.Agent, https.Agent]代理請求的URL - 執行HTTP請求的代理對象。連接池使用 。默認爲用於非SSL連接的全局代理 (http.globalAgent)。請注意,對於SSL 連接,使用特殊的代理對象以啓用對等 證書驗證。此功能僅在 Node.js環境中可用。

但是沒有辦法,至少沒有找到我能夠定義任何連接池屬性的方法。

如果我想控制正在使用的併發連接,我的選擇是什麼?

讓SDK處理它更好嗎?

回答

2

可以給http.Agent以任何您想要的最大套接字設置。

var AWS = require('aws-sdk'); 
var http = require('http'); 
AWS.config.update({ 
    httpOptions: { 
    agent: new http.Agent(...) 
    } 
}) 
+0

但不使用HTTPS不同的自定義代理SDK? – Thihara

+0

請參閱文檔中的類似代碼示例:http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html#Registering_Certificate_Bundles – at0mzk

+0

明白了,謝謝。 – Thihara

1

我一直在調查這一點。

我挖掘並找出正在使用的默認值。

AWS-SDK正在使用節點http模塊,其中defaultSocketCountINFINITY

他們正在使用https模塊下maxSocketCount50

相關的代碼片段。

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