2014-11-11 19 views
6

Witajcie faceci Jestem nowy w węźle js.Limit liczby równoległych żądań http w węźle js

Mam skrypt, który rozpoczynam kilka żądań http wewnątrz pętli Powiedzmy, że muszę wykonać 1000 żądań http. Chodzi o to, że mogę wykonać tylko jedno żądanie http na IP i mam tylko 10 adresów IP.

Tak więc, po 10 równoległych żądaniach muszę czekać na odpowiedź, aby wykonać kolejną.

Jak odczekać bez blokowania skryptu jedną odpowiedź z żądania http, aby uruchomić inną?

Mój problem polega na tym, że jeśli wykonuję chwilę oczekiwania na wolny IP, cały mój skrypt jest zablokowany i nie otrzymuję żadnej odpowiedzi.

Dzięki.

Odpowiedz

19

Do tego celu należy użyć modułu async.

Można użyć async#eachLimit celu ograniczenia jednoczesnych żądań do 10.

var urls = [ 
    // a list of 100 urls 
]; 

function makeRequest(url, callback) { 
    /* make a http request */ 
    callback(); // when done, callback 
} 

async.eachLimit(urls, 10, makeRequest, function(err) { 
    if(err) throw err; 
}); 

Ten kod pętli poprzez listę adresów URL i wezwanie makeRequest dla każdego z nich. Zatrzyma się na 10 równoczesnych żądaniach i nie będzie kontynuował 11 żądania, dopóki jeden z pierwszych 10 nie zakończy.

+0

Idealnie, uratowałeś mi życie: D –

Powiązane problemy