jobbely / tokenbucket
PHP 限流 TokenBucket 实现
dev-master
2018-08-13 10:50 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- phpmd/phpmd: 2.1.*@stable
- phpunit/dbunit: 1.3.1
- phpunit/php-code-coverage: 2.0.*@stable
- phpunit/phpunit: >=4.4.1
- squizlabs/php_codesniffer: 2.1.*@stable
Suggests
- ext-memcached: When using Memcached storage option, Memcached extension is required
This package is not auto-updated.
Last update: 2024-10-02 20:31:51 UTC
README
TokenBucket 是一种限流算法
您可以从 http://en.wikipedia.org/wiki/Token_bucket 检查算法
使用方法
基本使用
<?php use TokenBucket\TokenBucket; use TokenBucket\Storage\Memcached as MemcachedStorage; $storage = new MemcachedStorage(); // Define the bucket $options = array( 'capacity' => 20, 'fillRate' => 5 ); // Create the bucket $bucket = new TokenBucket('key-for-bucket', $storage, $options); // Check if token is avaible if ($bucket->consume()===false) { //Not allowed!! exit; } // ...
选项
capacity : 桶的最大令牌计数。
fillRate : 每秒填充的令牌计数。例如,如果 capacity 为 20,fillRate 为 5,则每秒将向桶中添加 5 个令牌。但是,总令牌数不能超过 20。
ttl : 桶在秒中的存活时间。如果没有给出或为零,它将根据 capacity 和 fillRate 自动计算。可以使用 ttl 来重置桶的 capacity。例如:如果 capacity 为 100,fillRate 为零,ttl 为 300,则可以在 300 秒内消耗 100 个令牌。300 秒后,桶将重置为 capacity。
限流 HTTP 头部
您可以通过 getRateLimitHttpHeaders 方法获取限流的 HTTP 头部
X-RateLimit-Limit : 给出桶的容量
X-RateLimit-Remaining : 桶允许的令牌计数
X-RateLimit-Reset : 桶的存活时间
贡献
您可以通过分支仓库并创建 pull requests 来贡献。您也可以创建问题或功能请求。
许可证
本项目受 MIT 许可证的许可。LICENSE 文件可以在本仓库中找到。