2012-05-26 10 views
7

Ho un'app NodeJS che invia richieste HTTP da varie posizioni nel codice, alcune addirittura dipendenti (invio di una richiesta, attesa di una risposta, elaborazione e in base ai risultati che inviano un'altra richiesta). Ho bisogno di limitare la frequenza delle richieste (ad es. 10 richieste all'ora).Come accodare le richieste HTTP get in Nodejs per controllarne la velocità?

Ho pensato di accodare le richieste e poi in qualche punto centrale di rilasciarle in modo controllato, ma sono rimasto bloccato su come accodare le funzioni di callback e i loro parametri dipendenti.

Sarebbe felice di ascoltare suggerimenti su come arrivare a questo scenario con una ristrutturazione minima per l'app.

Grazie

risposta

6

Penso che tu abbia già risposto alla tua domanda. La coda centrale che può limitare le tue richieste è la strada da percorrere. L'unico problema qui è che la coda deve avere le informazioni complete per la richiesta e il callback che deve essere usato. Vorrei astratto questo in un oggetto QueueableRequest che potrebbe somigliare a questo:

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');} 
})); 

Naturalmente questo è solo il codice di esempio che potrebbe essere molto più bella, ma spero che si ottiene l'immagine.

+1

Grazie! Questo è esattamente quello che mi mancava. Funziona alla grande – user971956

0

userei Deferreds e tornare uno per ogni richiesta in coda. È quindi possibile aggiungere callback di successo/fail alla promessa posticipata dopo che è stata accodata.

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

si può tenere un [ url, deferred ] coppie in coda, e ogni volta che un URL Dequeue avrete anche la differita che va con esso, che è possibile risolvere o fallire dopo si elabora la richiesta.

1

Il modulo Async ha un numero di opzioni di controllo che possono essere di aiuto. queue suona come una buona misura, in cui è possibile limitare la concorrenza.

Problemi correlati