使用Node.js + Express 2"代理"大量HTTP请求

Ale*_*kii 5 proxy http node.js express

我在Node.js + Express 2中编写代理.代理应该:

  1. 解密POST有效负载并根据结果向服务器发出HTTP请求;
  2. 加密来自服务器的回复并将其发送回客户端.

加密相关部分工作正常.我面临的问题是超时.代理应该在不到15秒的时间内处理请求.实际上,他们中的大多数都在500毫秒以下.

当我增加并行请求数时出现问题.大多数请求都已完成,但有些请求在15秒+几毫秒后失败.ab -n5000 -c300工作正常,但并发度为500时,某些超时请求失败.

我只能推测,但似乎问题是回调exectuion的顺序.首先出现的请求是否可能会挂起,直到ETIMEDOUT节点将焦点放在仍在500ms内及时处理的最新节点中.

PS:远程服务器没有问题.我正在使用请求与它进行交互.

UPD

事物适用于某些代码的方式:

function queryRemote(req, res) {
  var options = {};  // built based on req object (URI, body, authorization, etc.)
  request(options, function(err, httpResponse, body) {
    return err ? send500(req, res)
               : res.end(encrypt(body));
  });
}

app.use(myBodyParser);  // reads hex string in payload
                        // and calls next() on 'end' event

app.post('/', [checkHeaders,   // check Content-Type and Authorization headers
               authUser,       // query DB and call next()
               parseRequest],  // decrypt payload, parse JSON, call next()
         function(req, res) {
  req.socket.setTimeout(TIMEOUT);
  queryRemote(req, res);
});
Run Code Online (Sandbox Code Playgroud)

我的问题是:在ab发布时,比方说,20个POST /,表达路由处理程序被调用数千次.这并不总是发生,有时20个,只有20个请求得到及时处理.

当然,ab不是问题.我100%确定只发送了20个请求ab.但是多次调用路由处理程序.

我找不到这种行为的原因,有什么建议吗?

Ale*_*kii 2

超时是由于使用http.globalAgent默认情况下最多可以处理5 个并发请求而导致的host:port(在我的情况下这还不够)。

发送了数千个请求(而不是数十个)ab(Wireshark 在 OS X 下批准了这一事实;我无法在 Parallels 内的 Ubuntu 下重现此情况)。