Nodejs HTTP請求的逾時處理(Nodejs HTTP Client Request Timeout Handle)

來源:互聯網
上載者:User
問題

Nodejs原生的http.request 方法是不支援設定逾時參數的,
而網路請求經常會遇到逾時的情況,特別是對於外部網路,如果不處理逾時,發起的請求將會一直卡主,消耗的系統資源也不能及時被釋放。

解決方案(舊)

定時器:通過定時器,當timeout事件觸發的時候,主動調用req.abort() 終止請求,
然後返回逾時異常。

Request Timeout & Response Timeout
  • 逾時有請求逾時(Request Timeout):HTTP用戶端發起請求到接受到HTTP伺服器端返迴響應頭的這段時間,
    如果超出設定時間,則表示請求逾時。
  • 響應逾時(Response Timeout):HTTP伺服器端開始發送響應資料到HTTP用戶端接收全部資料的這段時間,
    如果超出設定時間,則表示響應逾時。
範例程式碼:Timeout Demo
var http = require('http');var request_timer = null, req = null;// 請求5秒逾時request_timer = setTimeout(function() {    req.abort();    console.log('Request Timeout.');}, 5000);var options = {    host: 'www.google.com',    port: 80,    path: '/'};req = http.get(options, function(res) {    clearTimeout(request_timer);    // 等待響應60秒逾時    var response_timer = setTimeout(function() {        res.destroy();        console.log('Response Timeout.');    }, 60000);    console.log("Got response: " + res.statusCode);    var chunks = [], length = 0;    res.on('data', function(chunk) {        length += chunk.length;        chunks.push(chunk);    });    res.on('end', function() {        clearTimeout(response_timer);        var data = new Buffer(length);        // 延後copy        for(var i=0, pos=0, size=chunks.length; i
有愛

^_^ 希望本文對你有用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.