我有以下代码。它向目标服务器发送简单的GET请求。
然而,当没有few服务器监听给定的IP地址时,节点会保持挂起大约2 minute+ -完全不考虑超时值-这应该是几秒钟。
我已经启动了tcpdump,并且我注意到节点在这2分钟内不断地向目标服务器发送SYN数据包。
为什么在http库上会发生这种情况?我测试了备用库(node-request),超时在那里工作正常。然而,由于某些原因,我不能使用它,需要坚持使用较低级别的库。
http = require('http');
const options = {
hostname: '52.178.167.109',
port: 80,
path: '/upload',
method: 'GET',
timeout: 5000, //5s timeout
};
const req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
req.end();
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
// Write data to request body
req.end();root@abc:~# time node test.js
problem with request: connect ETIMEDOUT 52.178.167.109:80
real **2m15.474s** <-------
user 0m0.616s
sys 0m0.084s发布于 2019-07-15 13:43:38
timeout属性仅适用于套接字不活动。您希望使用request.setTimeout来设置读取超时。github ticket https://github.com/nodejs/node/issues/12005澄清了这一点。
https://stackoverflow.com/questions/57032068
复制相似问题