2011-05-25 122 views
4

有一個帖子:How do I set a timeout for client http connections in node.js如何在Node.js中設置http.createClient的超時時間?

但沒有一個答案會奏效。

所以,我有這樣的代碼是:

var remote_client = http.createClient(myPost, myHost); 
    var path = '/getData?'; 
    var param = {  }; 

    var request = remote_client.request("POST", path,); 

    // error case 
    remote_client.addListener('error', function(connectionException){ 
     console.log("Nucleus Error: " + connectionException); 
     next(connectionException); 
    }); 

    request.addListener('response', function (response) { 
     response.setEncoding('utf-8'); 
     var body = ''; 

     response.addListener('data', function (chunk) { 

     // get the result!    
     }); 
    }); 

    request.end(); 

最大的問題是,我的連接可能會超時的URL。因此,我想設置一個超時時間,比如15秒。如果是這樣,觸發一個監聽器。

但是,我沒有在http.createClient的文檔中看到任何超時功能。請指教。謝謝。 :)

+0

請參閱此重複問題中的答案:http://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a-http-request-in-node(特別參閱杜威的答案) – Sandman4 2013-03-05 10:55:47

回答

6
var foo = setTimeout(function() { 
    request.emit("timeout-foo"); 
}, 15000); 

// listen to timeout 
request.on("timeout-foo", function() { }); 

request.addListener('response', function (response) { 
    // bla 
    // clear counter 
    clearTimeout(foo); 
}); 

只要你自己運行櫃檯。

+0

它有效嗎? – murvinlai 2011-05-25 19:32:41

+0

@murvinlal效率稍低,但使用本地超時但效率並不明顯,效率應該很高。 – Raynos 2011-05-26 00:17:46

+0

https://github.com/mikeal/request/issues/25 - 這個庫建立在http/client之上,所以它聽起來像是它在節點核心http客戶端中不是真正的功能 - 同意Raynos – Josh 2011-05-26 05:34:05

相關問題