razonyang / token-bucket
PHP Token Bucket
1.0.0
2019-08-21 05:02 UTC
Requires
- php: ^7.1
- psr/log: ^1.1
Requires (Dev)
- phpunit/phpunit: ^7
Suggests
- ext-memcached: MemcachedManager require memcached extension
- ext-redis: RedisManager require redis extension
This package is auto-updated.
Last update: 2024-09-21 20:51:31 UTC
README
这是用于HTTP速率限制的Token Bucket算法的实现。
安装
$ composer require razonyang/token-bucket
集成
您也可以自己构建,以下以每小时5000个请求为例
// create a token bucket manager $capacity = 5000; // each bucket capacity, in other words, maximum number of tokens. $rate = 0.72; // 3600/5200, how offen the token will be added to bucket $logger = new \Psr\Log\NullLogger(); // PSR logger $ttl = 3600; // time to live. $prefix = 'rateLimiter:'; // prefix. $manager = new \RazonYang\TokenBucket\Manager\RedisManager($capacity, $rate, $logger, $redis, $ttl, $prefix); // implements rate limiter, comsumes a token from the bucket which called $name. $name = 'uid:route'; // the name of bucket. $comsumed = $manager->consume($name, $remaining, $reset); // set header header('X-Rate-Limit-Limit: ' . $manager->getLimit()); header('X-Rate-Limit-Remaining: ' . $remaining); // remaining number of tokens. header('X-Rate-Limit-Reset: ' . $reset); if (!$comsumed) { throw new \Exception('Too many requests', 429); } // continue handling
致谢
以下文档和代码启发了它: