/** * @param Request $request */ private function throttleRequests(Request $request) { if (!$this->computedRps) { $this->computedRps = $this->getThrottleRequestsAt() / self::THROTTLE_REQUEST_INTERVAL_SECONDS; $request->log("Throttle request interval {$this->computedRps}"); } if (!$this->lastThrottleUpdateTime) { $this->lastThrottleUpdateTime = time(); } $this->updateRequestVolume(); $request->log("Request Volume {$this->requestVolume}"); if ($this->shouldThrottle()) { $request->log("Throttling"); do { usleep(100000); $this->updateRequestVolume(); } while ($this->shouldThrottle()); } }