2016-11-10 151 views
0

如果請求的持續時間超過10秒,下面的代碼將中止請求。在http請求中設置基於套接字的超時

是否可以使用http模塊在請求上設置基於socket的超時?

此外,我應該使用套接字和請求超時?

var abortRequestError; 
var timeout = 10000; 
var requestObject = { 
    host: 'xx.xx.xx.xx', 
    path: '/api', 
    port: 10000, 
    method: 'GET' 
}; 

var req = http.request(requestObject, function(res) { 

    var responseBody = ''; 
    res.on('data', function(data) { 
    responseBody += data; 
    }); 

    res.on('end', function() { 
    console.log(abortRequestError); 
    }); 

}).on('error', function(error) { 

    error = abortRequestError ? abortRequestError : error; 
    console.log(error); 

}).setTimeout(timeout, function() { 

    abortRequestError = new Error('Request timed out'); 
    req.abort(); 
}); 
+0

你的意思是連接超時? – elmigranto

+0

只有當數據流中斷10秒時纔會被認爲中斷。是否連接超時? – bobbyrne01

+0

您的代碼爲您想要實現的功能調用正確的函數 - 套接字空閒時超時;也許問題在別處。你想達到什麼目標,究竟哪些方法無效? – elmigranto

回答

1

對於連接超時,節點使用OS的默認值。簡單來說,當您在一段時間內無法到達服務器時會觸發這些事件。

建立連接後,request#setTimeout() function設置爲空閒超時,當一段時間內沒有網絡活動時觸發。聽起來像這是你想要的。 (請注意,它的下面簡單地調用socket#setTimeout創建套接字時,所以沒有必要調用兩個。)

對於其他類型的邏輯,你需要建立自己的東西與timers說明書使用。但是您提供的代碼應該能夠正常工作 - 如果在連接到服務器後,服務器停止發送數據的時間超過10,000毫秒,則會觸發超時。