#php #laravel #laravel-8 #rate-limiting
Вопрос:
Как установить ограничитель скорости в секунду в Laravel 8. Мне нужно установить ограничитель скорости в секунду, а не в минуту.
Ограничитель скорости (Laravel 8) — https://laravel.com/docs/8.x/routing#rate-limiting
Прямо сейчас я могу использовать ограничитель скорости Laravel в течение минут, часов и т. Д. Но я пытаюсь добиться ограничения скорости на секунду. Я хочу ограничить 25 запросов в секунду. (Экспортированный класс ограничения из «ПодсветкаКэшОграничение скоростиОграничение»)
Пожалуйста, проверьте следующий код, который я использовал
RateLimiter::for('api', function (Request $request) {
return [
// Rate limiter based on Client IP Address
Limit::perMinute(env('IP_ADDR_RATE_LIMITER_PER_MINUTE', 60))->by($request->ip())->response(function () {
....
}),
// Rate limiter based on API key/User
Limit::perMinute(env('API_KEY_RATE_LIMITER_PER_MINUTE', 60))->by($request->input('key'))->response(function () {
...
})
];
});
Есть ли какой-нибудь способ ограничить скорость 25 запросов в секунду?
Примечание: также попытался добавить/изменить функции в IlluminateCacheRateLimitingLimit, где я попытался изменить функцию в минуту. заранее спасибо.
Комментарии:
1. Не знаю, почему вас понизили в голосовании. У меня та же проблема. Вы уже нашли решение?
2. Я также ищу то же самое решение. Я не убежден (проведя несколько тестов), что установка (желаемой скорости * 60) в качестве предела::perMinute будет делать то же самое, что и ограничение скорости в секунду. Вы нашли решение?
Ответ №1:
Можно настроить Laravel 8 RateLimitter так, чтобы он учитывал req/секунды
Вот пример, который вы ищете: https://learn2torials.com/thread/how-to-set-the-rate-limiter-for-per-second-in-laravel-version-8
Комментарии:
1. Ответ, указанный в ссылке, не работает
Ответ №2:
Вы можете переопределить класс IlluminateCacheRateLimitingLimit, чтобы разрешить атрибут $perSeconds типа float и добавить новую функцию perSeconds ().
/**
* Create a new rate limit using seconds as decay time.
*
* @param int $maxAttempts
* @param int $decaySeconds
* @return static
*/
public static function perSeconds($decaySeconds, $maxAttempts)
{
return new static('', $maxAttempts, $decaySeconds/60.0);
}
Комментарии:
1. Это, похоже, не работает, так как внутренняя функция, возвращаемая отсюда, принимает только целочисленный тип, а не тип с плавающей точкой. Я получаю тот же результат, что и при использовании ограничителя минутной скорости.