2012-03-30 50 views
1

我正在测试一台服务器,并且我需要尽可能保持活动状态。我想手动设置http.request()函数的超时时间。这是我在我的代码中所做的。设置节点的http.request超时

var req = http.request(options, function(res) { 
     res.setEncoding('utf8'); 

     res.on('data', function (chunk) { 
      //do something with chunk 
     }); 
}); 

我想是这样req.on('socket' function(socket){ socket.setTimeout(SOCKET_TIMEOUT); });但它给了我一些奇怪的错误,我认为这是不这样做的正确方法。对于你的信息,我使用这种方法的错误如下

Trace: 
    at Socket.<anonymous> (events.js:133:17) 
    at ClientRequest.<anonymous> (/path/server_nologs.js:168:10) 
    at ClientRequest.emit (events.js:88:20) 
    at Array.1 (http.js:1250:9) 
    at EventEmitter._tickCallback (node.js:192:40) 
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. 

这对我来说有点神秘。有人能解释我如何设置超时?否则,如果我的方法是正确的,我怎样才能避免得到这个错误?

+1

一个变种你试过[req.setTimeout(HTTP:// nodejs.org/api/http.html#http_request_settimeout_timeout_callback)? – 2012-03-30 11:04:51

+0

刚刚尝试过。它似乎甚至不启动连接(我试图将它连接到另一个nodejs服务器,而另一个服务器没有记录任何连接)。 – Masiar 2012-03-30 11:13:50

+0

我注意到我在这个问题的边界之外有一些错误,我纠正了它们,现在服务器正在工作,但它在一段时间后仍然超时。我想这是我要联系的服务器,而不是这个。你知道如何在另一端设置超时吗?它仍然是前面提到的nodejs服务器。 – Masiar 2012-03-30 14:59:53

回答

0

下面是我使用的是什么:(对我的作品)


req = httpClient.request(urlParts.method, urlParts.path, urlParts); 
req.connection.setTimeout(HTTP_REQUEST_TIMEOUT); 

其中HTTP_REQUEST_TIMEOUT是我声明之前设置为30000

+0

谢谢,我已经找到了类似于你的答案,但是你正在使用'httpClient.request',我不知道它与我的实现有什么不同。无论如何+1谢谢:-) – Masiar 2012-03-30 14:56:33

+0

这设置连接超时而不是请求超时。关闭请求并不严格意味着关闭连接。 – kilianc 2012-05-30 16:59:39