节点https在5分钟后请求ECONRESET

时间:2017-06-24 10:22:05

标签: node.js https

我正在尝试向服务器发出https请求,该服务器需要超过5分钟才能响应。在通过套接字传输任何数据之前约7分钟,并且要求完成请求约11分钟。使用Curl时请求工作正常,但在使用node.js发出请求时出现此错误:

Error:  { Error: read ECONNRESET
    at exports._errnoException (util.js:1026:11)
    at TLSWrap.onread (net.js:564:26) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' }

用于发出请求的代码:

const https = require('https');

https.get({
    hostname: 'xxx',
    path: 'xxx',
    auth: 'xxx'
  },
  (res) => {
    res.on('data', (d) => {
      process.stdout.write(d);
    });
  }).on('error', (e) => {
  console.error(e);
});

由于请求在完成5分钟(300秒)后失败,我猜测存在某种超时,但我似乎无法找出它是哪一个或它在哪里。它也可能是服务器端超时,但奇怪的是它适用于Curl ..

2 个答案:

答案 0 :(得分:4)

解决方案是使用TCP Keep-Alive。 https://nodejs.org/api/net.html#net_socket_setkeepalive_enable_initialdelay

req.on('socket', (s) => {
  s.setKeepAlive(true, 240000);
});

这将每4分钟在套接字上发送一个TCP ACK数据包,这足以解决我的问题。

答案 1 :(得分:0)

来自Node js ECONNRESET

  

" ECONNRESET"表示TCP对话的另一端突然关闭其连接的结束。

来自What option causes curl to reconnect infinite times?

  每次请求的操作超时时,

curl都会尝试重新连接。

详细说明如下:

  

我的意思是将libcurl用作第三方软件包

希望这有帮助。