使用令牌桶速率限制机制清除桶的最佳建议

时间:2016-03-24 12:11:24

标签: php bucket throttling bandwidth-throttling

我正在使用' Bandwidth Throttle'用于限制API请求的库 - 实质上阻止来自同一IP的某个人在设定的时间范围内发出大量请求。这会创建一个存储在存储桶目录中的存储桶(只是一个文件)。

由于这会随着时间的推移而大大增加每个人使用的流程 - 你会建议用x个时间清除这个文件夹,如果是的话,建议的时间框架。

use bandwidthThrottle\tokenBucket\Rate;
use bandwidthThrottle\tokenBucket\TokenBucket;
use bandwidthThrottle\tokenBucket\storage\FileStorage;

$ip = $_SERVER['REMOTE_ADDR'];
$storage = new FileStorage(__DIR__ . "/buckets/$ip.bucket"); //this will build up quickly
$rate    = new Rate(10, Rate::SECOND);
$bucket  = new TokenBucket(10, $rate, $storage);
$bucket->bootstrap(10);

if (!$bucket->consume(1, $seconds)) {
  http_response_code(429);
  header(sprintf("Retry-After: %d", floor($seconds)));
  exit(); 
}

0 个答案:

没有答案