我正在使用“ Bandwidth Throttle ”库来限制 API 请求 - 从本质上防止来自同一 IP 的人在设定的时间范围内发出大量请求。这将创建一个存储在 buckets 目录中的存储桶(只是一个文件)。
随着时间的推移,这将大大增加每个人为此使用的过程 - 您是否会建议大量时间来清除此文件夹,如果是,建议什么时间范围。
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();
}