当前位置: 首页 > news >正文

PHP流量控制令牌桶算法

<?php
class TrafficController {private $capacity; // 桶的容量private $rate; // 每秒产生的令牌数private $tokens; // 当前桶中的令牌数private $lastRefillTime; // 上次填充令牌的时间private $waitingRequests; // 等待的请求队列private $counters; // 用户访问计数器public function __construct($capacity, $rate) {$this->capacity = $capacity;$this->rate = $rate;$this->tokens = $capacity;$this->lastRefillTime = time();$this->waitingRequests = [];$this->counters = [];}public function allowRequest($userId) {$this->refillTokens();if ($this->tokens < 1 || $this->exceedsRateLimit($userId)) {$this->waitingRequests[$userId][] = time();return false; // 请求被限流}$this->tokens--;$this->counters[$userId]++;return true; // 可以处理请求}private function refillTokens() {$currentTime = time();$this->tokens = min($this->capacity,$this->tokens + ($currentTime - $this->lastRefillTime) * $this->rate);$this->lastRefillTime = $currentTime;}private function exceedsRateLimit($userId) {$count = $this->counters[$userId] ?? 0;return $count >= $this->rate;}
}// 使用示例
$trafficController = new TrafficController(10, 2); // 桶容量为10,每秒产生2个令牌// 用户A发起请求
$userIdA = 1;
if ($trafficController->allowRequest($userIdA)) {// 处理请求echo "处理请求";
} else {// 请求被限流,返回错误信息echo "请求被限流";
}// 用户B发起请求
$userIdB = 2;
if ($trafficController->allowRequest($userIdB)) {// 处理请求echo "处理请求";
} else {// 请求被限流,返回错误信息echo "请求被限流";
}
?>

  

http://www.hskmm.com/?act=detail&tid=587

相关文章:

  • TIA博图的三种视图
  • 数据结构与算法-21.优先队列
  • 顽固文件夹无法删除?
  • 普科科技 PKC7030 高频电流探头调零指南
  • 智能CRM赋能饮料行业:纷享销客快消品全场景数字化解决方案
  • c++ std::map
  • 调一调
  • 【稳定检索|线上线下参会|马理工主办】第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025)
  • 软考架构备考-面向对象
  • 在AI技术快速实现创意的时代,挖掘真实需求成为核心竞争力——某知名实时语音转录系统需求洞察
  • 多版本jdk环境下,指定jdk版本执行jar文件
  • 【Python】Word文档解析表格并导出Excel
  • 海明码破解指南:从让人头疼的软考题到内存背后的无名英雄
  • 2025.9.9 总结
  • 基于Python+Vue开发的医院门诊预约挂号系统源码+运行
  • 2025 9 6 总结
  • 2025.9.8 总结
  • OLE读取EXCEL内容
  • 第5篇、 Kafka 数据可靠性与容错机制
  • Shell符号详解
  • Dynamics 365 CRM + Power Platform 技术顾问:解锁 IT 高薪赛道,长沙爱码士 IT 助你全程通关
  • Rope pbds
  • 295、嫦娥
  • 25.9.8随笔联考总结
  • rmrs 题解
  • IT 失业人员的福音:借微软 Dynamics 365 CRM 与 Power Platform 快速重启职业生涯
  • qoj10096 Generating Random Trees
  • 测试
  • PHP 轻松处理千万行数据 内存不爆,服务器不卡
  • 2025 杭电暑期多校训练