在网站开发中,限流是一种常见的策略,用于保护服务器免受过度负载和拒绝服务的攻击。以下是一个使用PHP和令牌桶算法实现的免费限流实例,可以帮助你控制网站的访问频率。
令牌桶算法原理
令牌桶算法是一种流量控制机制,它允许一定数量的请求通过,同时限制请求的速率。算法的核心思想是:一个桶以固定的速率产生令牌,请求只有获取了令牌才能被处理。

实现步骤
1. 初始化令牌桶:设置桶的大小(令牌数量)和生成令牌的速率。
2. 请求处理:每次请求到来时,检查桶中是否有令牌,如果有,处理请求并消耗一个令牌;如果没有,拒绝请求。
3. 生成令牌:以固定速率向桶中添加令牌。
PHP代码示例
以下是一个简单的PHP实现:
```php
class RateLimiter {
private $tokens;
private $rate;
private $lastRefillTime;
public function __construct($maxTokens, $tokensPerSecond) {
$this->tokens = $maxTokens;
$this->rate = $tokensPerSecond;
$this->lastRefillTime = microtime(true);
}
public function consume() {
$now = microtime(true);
$timePassed = $now - $this->lastRefillTime;
$tokensGenerated = $timePassed * $this->rate;
// 限制令牌数量不超过最大值
$this->tokens = min($this->tokens + $tokensGenerated, $this->tokens);
if ($this->tokens > 0) {
$this->tokens--;
$this->lastRefillTime = $now;
return true;
} else {
return false;
}
}
}
// 设置限流参数
$limiter = new RateLimiter(100, 1); // 桶大小100,每秒生成1个令牌
// 模拟请求
for ($i = 0; $i < 150; $i++) {
if ($limiter->consume()) {
echo "







