1. <?php
  2. class RequestThrottler {
  3. private $request_queue = [];
  4. private $limit;
  5. private $time_window;
  6. public function __construct(int $limit, int $time_window) {
  7. $this->limit = $limit;
  8. $this->time_window = $time_window;
  9. }
  10. public function isAllowed(string $request): bool {
  11. $now = time();
  12. // Remove expired requests from the queue
  13. $this->removeExpiredRequests($now);
  14. // Check if the queue is full
  15. if (count($this->request_queue) >= $this->limit) {
  16. return false; // Throttled
  17. }
  18. // Add the request to the queue
  19. $this->request_queue[] = $request;
  20. return true; // Allowed
  21. }
  22. private function removeExpiredRequests(int $now): void {
  23. $this->request_queue = array_filter($this->request_queue, function ($request) use ($now) {
  24. $request_time = time();
  25. return ($now - $request_time) < $this->time_window;
  26. });
  27. }
  28. public function getQueueSize(): int {
  29. return count($this->request_queue);
  30. }
  31. }
  32. ?>

Add your comment