NodeJS事件循环忙于从事件队列中获取HTTP请求任务。超时导致ETIMEDOUT

时间:2017-09-23 07:24:13

标签: node.js http settimeout

由于NodeJS事件循环的单线程特性,即使在HTTP请求被触发到下游应用程序之前,NodeJS也会自动超时,导致HTTP请求根本无法到达下游应用程序。即时间事件循环从事件队列中获取此任务已经发生超时(已经过了30ms)&对下游应用程序的请求永远不会被触发。

理想情况下,计时器应该在触发HTTP请求后启动,但在这种情况下,当任务仍在事件队列中等待事件循环拾取时,似乎计时器立即启动。

与此同时,我将超时从30ms增加到120ms,自我超时从每小时2.5K减少到每小时2-8。

let options = {
    url: Url, //URL to hit
    qs: params, //Query string data
    method: "GET", //Specify the method
    timeout: 30
};

request(options, (error, response, body) => {
    if (error) {
        return callback(new ErrorResponse(500, {error: error}));
    } else {
        return callback(null, response, body);
    }
});

下面的环境详情

  • node 5.9.1
  • npm 3.7.x
  • request~2.67.0
  • OS Ubuntu 14.04.4 LTS

我对事件循环的理解事件队列如下图所示。

enter image description here

有人可以帮我弄清楚这里的确切问题。

0 个答案:

没有答案