Node.js:处理来自节点的传出HTTP请求

时间:2014-11-20 00:40:01

标签: node.js jmeter

我一直在努力解决这个问题,但是找不到一个好的解决方案,所以来这里寻求帮助。

我有一个node.js服务器;在收到客户端的请求后,服务器将联系第三方后端获取一些数据,并将其返回给客户端。

服务器到第三方后端通信涉及多个来回呼叫,通常需要约3秒才能完成此过程。

如果我发出来自JMeter等测试工具的50个并发请求,性能下降会很快变得严重,甚至导致一些后来服务的呼叫超时。

最初我开始研究asyncblock,但由于它是在光纤上运行的,我没有看到性能有很大改进,所以我开始研究线程。

我能找到的唯一成熟的模块是thread-a-gogo,但我最近也发现你不能在TAGG产生的线程中使用所需的外部模块(例如crypto)。

鉴于有使用node.js构建的代理产品,我相信有一种有效的方法可以做到这一点,但如果线程不能使用外部模块,我真的不能想到其他方法。

任何建议都将受到赞赏。

由于NDA,我无法透露全部细节,但这是我正在做的基本概念。我想将以下逻辑发送到一个单独的线程。

asyncblock(flow){
    var result1 = flow.sync(externalRequest1(flow.callback());
    if result1 contains success message
         var result2 = flow.sync(externalRequest2(flow.callback());
         if result2 contains success message
             process result2 and return to client
}

1 个答案:

答案 0 :(得分:2)

首先要检查并确定:您使用的是node.js核心HTTP代理吗?如果是这样,您将受到与同一服务器的5个连接的maxSockets限制。请阅读the hyperquest README rant了解详情。

其次,请注意远程端也可能会施加滥用限制,因此请检查是否存在问题,或者如果您使用单个10个连接池而不是无限制地打开,则整体性能会更好与上游服务器同时连接的数量。