节点 RED - 使用多个 HTTP 请求连接 ECONNREFUSED

NodeRED - Connect ECONNREFUSED with multiples HTTP requests

当我们使用 NodeRED[=34] 在我们的 NodeJS API 服务器上使用 HTTP 请求 进行大量请求时,我们遇到了一个问题=].

顺便说一下,我们还使用他在 请求库 上实现的 WWW Request 节点对其进行了测试。结果是一样的:(

这是错误堆栈跟踪:

error:
  { message: 'Error: connect ECONNREFUSED 163.113.172.80:1337',
    source:
     { id: '5d2aa78c.a2d558',
       type: 'http-request',
       name: undefined,
       count: 1 },
    stack: 'Error: connect ECONNREFUSED 163.113.172.80:1337\n    at
    Object.exports._errnoException (util.js:856:11)\n    at
    exports._exceptionWithHostPort (util.js:879:20)\n    at
    TCPConnectWrap.afterConnect [as oncomplete] (net.js:1062:14)' } }

当然,我们使用 Apache Benchmark (ab CLI) 测试了我们的 API 服务器,结果成功(没有失败),API 率为 500 req/s。

技术资料:

  • Node-RED 版本:v0.14.5
  • Node.js 版本:v5.5.0
  • Windows_NT 6.1.7601 x64 LE
  • 处理器:Intel Xeon CPU E5-630 v3 3.70Ghz 8 核
  • 内存:64Gb

有什么想法吗?

我们通过像这样设置最大套接字值找到了解决方法:

http.globalAgent.maxSockets = 100;
https.globalAgent.maxSockets = 100; 

默认情况下,HTTP(S) 全局代理最大套接字值似乎是无限的...