NPM 请求模块(REST 客户端)的默认超时是多少?
Posted
技术标签:
【中文标题】NPM 请求模块(REST 客户端)的默认超时是多少?【英文标题】:What is the default timeout for NPM request module (REST client)? 【发布时间】:2017-02-05 06:44:25 【问题描述】:接下来是我的 node.js 调用以检索一些数据,这需要超过 1 分钟。这将在 1 分钟(60 秒)时超时。我也为延迟放置了一个控制台日志。但是我已将超时配置为 120 秒,但它没有反映。我知道默认级别的 nodejs 服务器超时是 120 秒,但我仍然从这个 request 模块中获得了这个调用的超时(60 秒)。请提供您对此的见解。
var options =
method: 'post',
url:url,
timeout: 120000,
json: true,
headers:
"Content-Type": "application/json",
"X-Authorization": "abc",
"Accept-Encoding":"gzip"
var startTime = new Date();
request(options, function(e, r, body)
var endTime = new Date();
var latencyTime = endTime - startTime;
console.log("Ended. latencyTime:"+latencyTime/1000);
res.status(200).send(body);
);
【问题讨论】:
【参考方案1】:从request options docs,向下滚动到timeout
条目:
timeout - 整数,包含在中止请求之前等待服务器发送响应标头(并启动响应正文)的毫秒数。请注意,如果无法建立底层 TCP 连接,则 OS 范围的 TCP 连接超时将覆盖超时选项(Linux 中的默认值可以是 20-120 秒)。
注意最后一部分“如果无法建立底层 TCP 连接,则 OS 范围的 TCP 连接超时将推翻超时选项”。
Timeouts 上还有一个完整的部分。基于此,以及您的代码示例,我们可以这样修改请求示例
request(options, function(e, r, body)
if (e.code === 'ETIMEDOUT' && e.connect === true)
// when there's a timeout and connect is true, we're meeting the
// conditions described for the timeout option where the OS governs
console.log('bummer');
);
如果这是真的,您需要确定更改操作系统设置是否可行且可接受(这超出了此答案的范围,这样的问题在服务器故障上会更好)。
【讨论】:
嗨,马修,我收到了这个错误。 [错误:读取 ECONNRESET] 代码:'ECONNRESET',errno:'ECONNRESET',系统调用:'read'。有什么想法为什么我会得到这个?通过 REST 客户端(POSTMAN/ 等),我能够在 1 秒内得到响应。但是通过这个节点模块需要一些时间。当我 cat /proc/sys/net/ipv4/tcp_syn_retries 时,我得到了 6 的值。 首先,如果ECONNRESET
是错误,那么超时不是问题。你有一个不同的问题,你应该看到另一个 Stack Overflow 答案:***.com/a/17637900/2247344
这个答案仍然正确吗?当我尝试使用它或任何选项时,e 或 error 参数从不包含 code 属性或 connect 属性。它确实包含一条消息说超时
我已经有几个月没用过request了,但是文档和这个答案是一致的。所以我不能肯定地说,但似乎模块仍然是这样构建的(或者已经改变但文档没有更新?)。以上是关于NPM 请求模块(REST 客户端)的默认超时是多少?的主要内容,如果未能解决你的问题,请参考以下文章