2013-08-16 6 views
8

La documentazione:della valvola a farfalla per ogni url nella node.js restify

Nota che si può sempre inserire questo sulle rotte per-URL consentono diversi tassi di richiesta a diverse risorse (se per esempio, un percorso , come/my/slow/database è molto più facile da sovrascrivere rispetto a /my/fast/memcache).

Ho difficoltà a scoprire come implementare esattamente questo.

Fondamentalmente, voglio servire file statici con una frequenza di accelerazione diversa dalla mia API.

+0

prova questo [restify-throttle @ GitHub] (https://github.com/thisandagain/restify-throttle/tree/master#use-without-restify) – dgm

risposta

11

Impostazione della limitazione (limitatore di velocità) con restituzione per alcuni endpoint come questo.

var rateLimit = restify.throttle({burst:100,rate:50,ip:true}); 
    server.get('/my/endpoint', 
     rateLimit, 
     function(req, res, next) { 
      // Do something here 
      return next(); 
     } 
    ); 
    server.post('/another/endpoint', 
     rateLimit, 
     function(req, res, next) { 
      // Do something here 
      return next(); 
     } 
    ); 

O come questo.

server.post('/my/endpoint', 
     restify.throttle({burst:100,rate:50,ip:true}), 
     function(req, res, next) { 
      // Do something here 
      return next(); 
     } 
    ); 

Anche quando la limitazione al punto finale di una valvola a farfalla globale può ancora essere desiderato, in modo che si può fare in questo modo.

server.use(restify.throttle({burst:100,rate:50,ip:true}); 

(riferimento) farfalla è uno dei restify di Bundled-Plugins.

+0

Qual è la differenza tra 'rate' e' burst' ? –

+1

Restify utilizza l'algoritmo [token bucket] (https://en.wikipedia.org/wiki/Token_bucket) per limitare il traffico. Con questo, il valore 'burst' è il numero massimo possibile di richieste al secondo, e il valore 'rate' è il tasso medio di richieste al secondo. Anche se le richieste sono costanti dal punto di vista del chiamante, il server Restify potrebbe non ricevere tali richieste ad un ritmo costante (a causa di congestione della trasmissione o altri motivi), quindi il valore 'burst' fornisce un livello di tolleranza oltre il valore medio 'rate'. –