2015-10-25 134 views
0

我有一個node.js進程,它使用大量客戶端請求從網站提取信息。我正在使用請求包(https://www.npmjs.com/package/request),因爲它說:「它支持HTTPS並默認遵循重定向。」Node.js客戶端請求掛起

我的問題是,一段時間後,請求開始掛起。我一直無法確定這是因爲服務器正在返回一個無限數據流還是正在發生其他事情。我已經設置了超時時間,但是在一些成功的請求之後,其中一些最終被卡住並且從未完成。

var options = { url: 'some url', timeout: 60000 }; 
request(options, function (err, response, body) { 
    // process 
}); 

我的問題是,使用這個庫接收到數據的一定量後,我可以關閉連接,我可以停止從懸掛的要求?我是否需要使用http/https庫並處理重定向和協議切換以便獲得我需要的控制類型?如果我這樣做,是否有一個標準化的做法呢?

編輯:此外,如果我停止該過程並重新啓動它們,它們會選擇正確的備份並開始工作,所以我不認爲它與服務器或代碼運行的計算機相關。

+0

是否運行了Node.js的版本? (在終端輸入'node --version') –

+0

版本是v4.2.1 –

回答

2

請注意,在request(options, callback)中,回調將在請求完成時觸發,並且無法中斷請求。

你應該聽上data事件,而不是:

var request = require('request') 

var stream = request(options); 

var len = 0 
stream.on('data', function(data) { 
    // TODO process your data here 

    // break stream if len > 1000 
    len += Buffer.byteLength(data) 
    if (len > 1000) { 
     stream.abort() 
    } 
})