jobbely/tokenbucket

PHP 限流 TokenBucket 实现

dev-master 2018-08-13 10:50 UTC

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 : 桶在秒中的存活时间。如果没有给出或为零,它将根据 capacityfillRate 自动计算。可以使用 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 文件可以在本仓库中找到。