2012-03-30 59 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