如何在node.js中为客户端http连接设置超时

我正在写一个node.js应用程序需要与服务器交谈。 它使用以下代码build立一个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秒。 我遇到的问题是,我在中国的用户似乎是一个缓慢或片状的networking,有时候他们连接到美国的数据中心。 我想增加超时到1分钟,看看是否为他们修复。

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

尝试

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

我想你可以做一些事情:

 request.connection.setTimeout(60000) 

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

在设置超时之前,您必须等待客户端套接字连接被首先build立。 为此,请为“套接字”事件添加一个callback:

 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 }); 

看到这个答案 。

Node中没有增加连接超时的function。 由于通常连接超时(即连接build立超时)是所有应用程序的OS范围设置(例如, 在Windows中 21秒, 在Linux中 20到120秒)。 请参阅请求包中的Timouts 。

相反,即使在连接尚未build立的情况下,Node也允许设置减less的超时并中止连接。

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