<?php
/**
* Throttles JSON request responses for dry-run scenarios.
*
* @param callable $callback The function to execute for each request. Should return the JSON response.
* @param int $requestsPerSecond The maximum number of requests allowed per second.
* @return callable A throttled version of the callback function.
*/
function throttleJsonRequests(callable $callback, int $requestsPerSecond): callable
{
$lastExecutionTime = 0;
$requestQueue = [];
return function () use ($callback, $lastExecutionTime, $requestsPerSecond, &$requestQueue) {
$now = time();
// Calculate time since last execution
$timeSinceLastExecution = $now - $lastExecutionTime;
// Check if enough time has passed to allow a new request
if ($timeSinceLastExecution < (1 / $requestsPerSecond)) {
// Wait until enough time has passed
$sleepTime = (1 / $requestsPerSecond) - $timeSinceLastExecution;
usleep($sleepTime * 1000000); // Convert seconds to microseconds
}
// Execute the callback
$result = call_user_func($callback);
// Update the last execution time
$lastExecutionTime = $now;
// Optionally, process the result here (e.g. log, validate)
// echo "Request processed. Result: " . json_encode($result) . "\n";
return $result;
};
}
Add your comment