我试图向需要 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/