2016-01-11 87 views
3

我已經寫在節點和快速的程序,使用Request連接到API並下載一組數據(3000個思API請求)(內的所有API,你要知道的使用限制)。NodeJS:我需要結束HTTP請求來節省內存/ CPU嗎?

當碼頭工人容器中運行這個,我得到了很多getaddrinfo ENOTFOUND錯誤的,我想知道這是否是一個資源配置的問題。我的要求是,像這樣:

request.get(url, function(err, resp, body){ 
    // do stuff with the body here, 
    // like create an object and handball to a worker function 
}); 

對於前幾百個請求,這一直工作正常,但後來我得到很多河畔地段要麼ENOTFOUND或超時錯誤的,我認爲這個問題可能是我的代碼是這樣的處理所有這些請求。

我已經分批他們在超時隊列所以請求發生相對緩慢,它可以幫助一點點,但並不能完全解決問題。

我是否需要銷燬身體/響應對象以釋放內存或其他東西?

+0

澄清:您是否立即發送所有請求?你有沒有考慮限制併發請求的數量(例如與異步) – h0ru5

+0

你很可能遇到與你調用的API供應問題 –

+0

@ h0ru5我做了類似的事情,因爲我創建了一個隊列數組和一個循環的腳本,每5秒鐘執行25個呼叫。 – Jascination

回答

2

我遇到類似的問題與我使用的API,它結束了哪些建議在這裏 - 速率限制。有些API在速率限制上不會返回可讀的錯誤,因爲它們爲每個客戶端提供了一定數量的資源,並且當您使用完所有資源時,它們甚至無法向您發送錯誤的響應。

發生這種情況,即使我已經住每天公佈的利率範圍之內,但原來,他們是每分鐘一個不成文的限制(或更像是 - 只是無法處理如此多的請求)。

雖然我用自己的代碼嘲笑了API,但將它放在網絡中以便最大限度地發揮相似性,並且我的模擬代碼沒有做任何事情,所以我從來沒有在NodeJS服務器中發現任何錯誤。

然後我在需要的時候放了一些倒計時和超時。

我建議你也一樣。記住他們每小時有一個限制,並不意味着他們沒有每秒/每分鐘的限制。