public function checkRateLimit() { $current = time(); // 获得限制配置 $limit 限制次数,$window秒数。 // 比如每300s调用1000次 // $window=300 $limit=1000 list ($limit, $window) = getRateLimit(); // 获得限制数据 $allowance 可用调用次数,$timestamp上次调用时间。 list ($allowance, $timestamp) = loadAllowance(); // 计算这次可调用次数,即$allowance再加上两次间隔调用时间*调用速率 $allowance += (int) (($current - $timestamp) * $limit / $window); if ($allowance > $limit) { $allowance = $limit; } if ($allowance < 1) { //每次调用可调用为0 saveAllowance(0, $current); return false; } else { //每次调用可调用次数减1 saveAllowance($allowance - 1, $current); return true; } }