node.js - 5 分钟后 Node https 请求 ECONRESET

标签 node.js https

我试图向需要 5 分钟以上响应的服务器发出 https 请求。在通过套接字传输任何数据之前约 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 一起工作。

最佳答案

解决方案是使用 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 数据包,这足以解决我的问题。

关于node.js - 5 分钟后 Node https 请求 ECONRESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44735368/

相关文章:

node.js - 从 mongoose 数据库获取模型

node.js - 如何使用适用于 Node.js 的 bot builder sdk 在打字栏中添加“开始”按钮

http - 从 http 切换到 https 时如何强制使用新的 session cookie/sessionId(在 Tomcat 中)

python - urllib2/httplib 如何通过 Squid 代理与 HTTP 1.1 进行 HTTPS 连接?

node.js - 机器被锁定/解锁时的事件(Electron Windows)

node.js - 蒙戈JS : MongoError: failed to connect to server with correct credentials

javascript - 使用 Node.js/Angular 对 Google 电子表格 JSON 的跨源请求

Iphone 将 url 标记为不安全

ios - 从 http 切换到 https。证书无效

http - 如何判断 HTTP 响应是否在 C 中终止