2010-08-27 142 views
8

我正在编写需要与服务器通信的node.js应用程序。它建立与下面的代码HTTP连接:如何在node.js中为客户端http连接设置超时

var client = http.createClient(u.port, u.hostname, u.secure); 
client.on("error", function(exception) { 
    logger.error("error from client"); 
}); 
var request = client.request(method, u.path, headers); 

我没有看到node.js的文档中的任何选项的连接设置超时,它似乎被设置为20秒默认。我遇到的问题是,我在中国有用户,看起来是一个缓慢或片状的网络,有时候他们连接到我们美国的数据中心。我想将超时时间增加到1分钟,以查看是否为他们修复了这个问题。

有没有办法做到这一点在node.js?

+1

正确的答案都在这个重复的问题:http://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a-http-request-in-node(尤其是看杜威的回答) – Sandman4 2013-03-05 10:51:57

+0

[如何在节点中设置http.request()的超时值?](https://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a- http-request-in-node) – 2018-01-02 22:09:03

回答

4

我认为你可以这样做:

request.connection.setTimeout(60000) 

request.connection返回与连接相关的net.Stream对象。 和net.Stream有一个setTimeout方法。

+0

不起作用。我还发现有一个client.setTimeout()方法,这也不起作用。我认为这些是连接流量超时,而不是建立连接。 – 2010-08-30 23:08:00

+0

对。好吧然后......我将通过一些代码进行另一次拖网。可能值得检查一下/如果一些节点框架处理这个问题。 – 2010-08-31 04:09:59

+0

谢谢你为我解决了一个WebSocket代理问题;)连接在一分钟左右后就死掉了。 – 2011-04-21 08:27:15

6

尝试

request.socket.setTimeout(60000); // 60秒

+1

这是至少有节点边缘的正确答案... https://github.com/ry/node/blob/master/lib/http.js#L774 – Quickredfox 2010-11-10 00:08:51

1

在设置超时之前,您必须等待客户端套接字连接先建立。要做到这一点,添加一个回调的 '窝' 事件:

req.on('socket', function (socket) { 
    myTimeout = 500; // millis 
    socket.setTimeout(myTimeout); 
    socket.on('timeout', function() { 
     console.log("Timeout, aborting request") 
     req.abort(); 
    }); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
    // error callback will receive a "socket hang up" on timeout 
}); 

See this answer

1

有没有能力在节点增加连接超时。由于通常连接超时(即连接建立超时)是所有应用程序的OS范围设置(例如,21秒in Windows,从20到120秒in Linux)。另见Timouts in Request package

相比之下,Node允许设置减少的超时并中止连接,即使在连接尚未建立的情况下。

可以根据文档(参见request.setTimeout,socket.setTimeout)控制进一步的超时(在连接已建立的情况下)。

相关问题