限制多个用户对外部站点PHP的请求


Throttle multiple-user requests to external site PHP?

我目前有一个脚本,它在一定程度上向外部站点发送请求。外部站点使用API的API限制为每30秒50次,如果它向主站点发送特定类型的请求(就像我的脚本所做的那样),则为每分钟3次。现在,对于一个使用脚本的用户来说,这很容易解决。但是,多个用户将同时使用该脚本,如果有足够多的用户同时使用,则限制将超过。我试图限制多个用户请求,以防止我的服务器发送超过限制的请求,即使每个用户都没有。我正在想办法做到这一点。确保服务器永远不会向外部网站发送太多请求。有办法做到这一点吗?

使用具有共享存储的令牌桶算法进行速率限制。我为您实现了一个:带宽节流/令牌桶

此示例将所有用户的速率限制为每30秒50个请求(即每分钟100个请求):

use bandwidthThrottle'tokenBucket'Rate;
use bandwidthThrottle'tokenBucket'TokenBucket;
use bandwidthThrottle'tokenBucket'storage'FileStorage;
$storage = new FileStorage(__DIR__ . "/api.bucket");
$rate    = new Rate(100, Rate::MINUTE);
$bucket  = new TokenBucket(50, $rate, $storage);
$bucket->bootstrap(50);
if (!$bucket->consume(1, $seconds)) {
    http_response_code(429);
    header(sprintf("Retry-After: %d", floor($seconds)));
    exit();
}