我正在编写一个需要与服务器通信的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中执行此操作?
答案 0 :(得分:7)
尝试
request.socket.setTimeout(60000); // 60秒
答案 1 :(得分:4)
我认为你可以这样做:
request.connection.setTimeout(60000)
request.connection返回与该连接关联的net.Stream对象。 和net.Stream有一个setTimeout方法。
答案 2 :(得分:2)
Node中没有能力增加连接超时。由于通常连接超时(即连接建立超时)是所有应用程序的OS范围设置(例如,21秒in Windows,从20到120秒in Linux)。另请参阅Timouts in Request package。
相反,即使在尚未建立连接的情况下,Node也允许设置减少的超时和中止连接。
可以根据文档控制进一步的超时(如果已建立连接)(请参阅request.setTimeout
,socket.setTimeout
)。
答案 3 :(得分:1)
在设置超时之前,必须先等待建立客户端套接字连接。为此,请为'socket'事件添加回调:
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
});