2012-05-26 24 views
7

Kodda çeşitli yerlerden HTTP alma istekleri gönderen bir NodeJS uygulamasına sahibim, bazıları bile bağımlıdır (bir istek göndermek, bir yanıt beklemek, işlemek ve başka bir istek göndermek sonuçlarına dayanarak). İsteklerin oranını sınırlamam gerekiyor (ör. Saat başına 10 talep).Oranlarını kontrol etmek için Nodejs'de http alma istekleri nasıl sıralanır?

İsteklerin sıraya konmasını ve daha sonra bazı merkezi noktalarda bunları kontrollü bir şekilde serbest bırakmayı düşündüm, ancak geri çağırma işlevlerini ve bağımlı parametrelerini sıraya sokmak için takıldım.

Uygulama için en az yeniden yapılanma ile bu senaryoyu nasıl geçeceğinize dair önerileri duymaktan memnuniyet duyarız.

Teşekkür

cevap

6

Sorunuzu zaten yanıtladığınızı düşünüyorum. İsteklerinizi kısaltabilen merkezi bir sıra gitmek için bir yoldur. Burada tek sorun, sıranın istek için tam bilgi ve kullanılması gereken geri arama (lar) olması gerektiğidir. Tabii

var QueueableRequest = function(url, params, httpMethod, success, failure){ 
    this.url = url; 
    this.params = params; 
    ... 

} 
//Then you can queue your request with 

queue.add(new QueueableRequest({ 
    "api.test.com", 
    {"test": 1}, 
    "GET", 
    function(data){ console.log('success');}, 
    function(err){ console.log('error');} 
})); 

bu daha güzel olabilir sadece örnek kod, ama resmi olsun umut: Ben QueueableRequest nesnede bu soyut şuna benzer olabilir ki.

+1

Teşekkür ederiz! Bu tam olarak eksik olduğum şey. Harika çalışıyor – user971956

0

Ben Deferreds kullanabilir ve her sıraya istek için bir tane dönecekti. Ardından, sıraya alındıktan sonra ertelenmiş vaatlere başarılı/başarısız geri aramalar ekleyebilirsiniz.

var deferred = queue.add('http://example.com/something'); 
deferred.fail(function(error) { /* handle failure */ }); 
deferred.done(function(response) { /* handle response */ }); 

Sıranızda bir [ url, deferred ] çiftleri tutabilir ve bir URL sıradan çıkarma her zaman Ayrıca çözmeniz ya da isteği işlemek sonra başarısız olabilir, hangi onunla gider Ertelendi gerekecek.

1

Async modülünde size yardımcı olabilecek bir dizi kontrol akışı seçeneği vardır. queue, eşzamanlılığı sınırlayabileceğiniz iyi bir uyum gibi görünüyor.

İlgili konular