【问题标题】:Node.js http.request failing exactly after 120 secNode.js http.request 恰好在 120 秒后失败
【发布时间】:2016-03-02 23:51:56
【问题描述】:

我知道 server.timeout 和 socket 的 keepalive 超时默认超时为 120 秒。但就我而言,我已经将 http 代理设置更改为 170 秒,并将 socket.timeout 和服务器超时更改为 170 秒。仍然收到错误 ECONNRESET "socket hangup"。

下面是代理设置和套接字时间设置。

"proxy_agent": {
    "maxSockets" : 256,
    "maxFreeSockets" : 256,
    "keepAlive" : true,
    "keepAliveMsecs" : 170000,
    "keepAliveTimeout" : 15000,
    "timeout" : 170000
},

和Socket设置

var setupSocket = function(socket) {
    socket.setNoDelay(true);
    socket.setTimeout(170000);
    socket.server.timeout = 170000;
    socket.setKeepAlive(true,0);
    return socket;
};

下面是调试器屏幕截图,显示了我的所有自定义值都已正确设置。

【问题讨论】:

  • 问:您的 node.js 应用程序 MAKING 是对 REMOTE SERVER 的 http 请求吗?您需要对对话的双方进行故障排除 - 本地和远程。在这里查看一些好的故障排除示例:Node js ECONNRESET/node-js-econnreset。附加建议:下载并熟悉Wireshark 和/或Fiddler2。两者都是非常宝贵的故障排除工具!
  • 感谢您的回复@Paulsm4。是的,我的应用正在调用远程服务器。但是当通过 curl 调用同一个远程服务器时,它不会在 120 秒时超时,所以我知道这是节点设置。但考虑到所有地方都已更改,不确定还有哪些地方可以更改超时设置。

标签: node.js sockets tcp keep-alive


【解决方案1】:

最后我得到了问题。 http('connection') 和 https('secureConnection') 有两个单独的事件,因此之前仅对 http 禁用了套接字超时。因此,所有 https 请求仍会在默认 120 秒时超时。因此,在为“secureConnection”事件禁用套接字之后,https 请求实际上一直在工作,直到给定的请求超时。

注意:此问题仅存在于 https,我最初未能认识到解决问题的关键。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多