我正在尝试向服务器发出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 ..
答案 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)
" ECONNRESET"表示TCP对话的另一端突然关闭其连接的结束。
来自What option causes curl to reconnect infinite times?,
每次请求的操作超时时,curl都会尝试重新连接。
详细说明如下:
我的意思是将libcurl用作第三方软件包
希望这有帮助。