1. Go to this page and download the library: Download zwirek/reactphp-limiter library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
zwirek / reactphp-limiter example snippets
$loop = \React\EventLoop\Loop::get();
$limiter = new \Zwirek\Limiter\RateLimiter(2, function($counter) use ($loop) {
$deferred = new \React\Promise\Deferred();
echo 'execute for ', $counter, PHP_EOL;
$loop->addTimer(2, function() use ($deferred, $counter) {
$deferred->resolve('return ' . $counter . PHP_EOL);
});
return $deferred->promise();
});
for ($i = 1; $i <= 10; $i++) {
$limiter->handle($i)->then(function($resolve) { echo $resolve; });
}
$loop->run();
$loop = \React\EventLoop\Loop::get();
$limiter = new \Zwirek\Limiter\RateLimiter(2, function($counter) use ($loop) {
$deferred = new \React\Promise\Deferred();
echo 'execute for ', $counter, PHP_EOL;
$loop->addTimer(2, function() use ($deferred, $counter) {
$deferred->resolve('return ' . $counter . PHP_EOL);
});
return $deferred->promise();
}, 5);
for ($i = 1; $i <= 10; $i++) {
$limiter->handle($i)
->then(
function ($resolve) {
echo $resolve;
},
function (OverflowException $exception) use ($i) {
echo 'Overflow limit reached for call ', $i, PHP_EOL;
}
);
}
$loop->run();
$loop = \React\EventLoop\Loop::get();
$limiter = new \Zwirek\Limiter\TimeWindowLimiter(2, 500, function($counter) use ($loop) {
$deferred = new \React\Promise\Deferred();
echo 'execute for ', $counter, PHP_EOL;
$loop->addTimer(1, function() use ($deferred, $counter) {
$deferred->resolve('return ' . $counter . PHP_EOL);
});
return $deferred->promise();
});
for ($i = 1; $i <= 10; $i++) {
$limiter->handle($i)->then(function($resolve) { echo $resolve; });
}
$loop->run();
$loop = \React\EventLoop\Loop::get();
$limiter = new \Zwirek\Limiter\TimeWindowLimiter(2, 500, function($counter) use ($loop) {
$deferred = new \React\Promise\Deferred();
echo 'execute for ', $counter, PHP_EOL;
$loop->addTimer(1, function() use ($deferred, $counter) {
$deferred->resolve('return ' . $counter . PHP_EOL);
});
return $deferred->promise();
}, 5);
for ($i = 1; $i <= 10; $i++) {
$limiter->handle($i)
->then(
function ($resolve) {
echo $resolve;
},
function (OverflowException $exception) use ($i) {
echo 'Overflow limit reached for call ', $i, PHP_EOL;
}
);
}
$loop->run();