解析node.js中的每个网址节流

ilo*_*ett 8 node.js restify

文件说明:

请注意,您始终可以将其放在每个URL路由上,以便为不同的资源启用不同的请求速率(例如,一个路由,比如/ my/slow/database比/ my/fast/memcache更容易overwhlem).

我无法找到如何完全实现这一点.

基本上,我想以与我的API不同的节流速率提供静态文件.

Mar*_*ska 11

设置限制(速率限制器),为这样的某些端点解析.

    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();
        }
    );
Run Code Online (Sandbox Code Playgroud)

或者像这样.

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

即使在每个端点进行节流时,仍然需要全局节流,因此可以这样做.

    server.use(restify.throttle({burst:100,rate:50,ip:true});
Run Code Online (Sandbox Code Playgroud)

(参考)Throttle是restify的插件之一.

  • Restify 使用 [token bucket](https://en.wikipedia.org/wiki/Token_bucket) 算法来限制流量。有了这个,`burst` 值是每秒可能的最大请求数,而 `rate` 值是每秒请求的平均速率。即使从调用者的角度来看请求是稳定的,Restify 服务器也可能无法以稳定的速度接收这些请求(由于传输拥塞或其他原因),因此 `burst` 值提供了超出平均 `rate` 值的一些容忍度。 (2认同)