<?php
class RequestThrottler {
private $request_queue = [];
private $limit;
private $time_window;
public function __construct(int $limit, int $time_window) {
$this->limit = $limit;
$this->time_window = $time_window;
}
public function isAllowed(string $request): bool {
$now = time();
// Remove expired requests from the queue
$this->removeExpiredRequests($now);
// Check if the queue is full
if (count($this->request_queue) >= $this->limit) {
return false; // Throttled
}
// Add the request to the queue
$this->request_queue[] = $request;
return true; // Allowed
}
private function removeExpiredRequests(int $now): void {
$this->request_queue = array_filter($this->request_queue, function ($request) use ($now) {
$request_time = time();
return ($now - $request_time) < $this->time_window;
});
}
public function getQueueSize(): int {
return count($this->request_queue);
}
}
?>
Add your comment