Задать вопрос
fast-je
@fast-je
Пишу на php.

Как работает Token Bucket Rate Limiter?

Есть написаный телеграм бот, его функция довольно проста, расшарить свой номер телефона на который зареган телеграм, чтобы подтвердить аккаунт на сайте.
Так вот, его написали так, что он принимает сообщения и тут же отдает ответ клиенту.
Его заспамили, то есть ему прислали столько сообщений, что телеграм блокирует запросы которые посылает сайт или точнее сказать он телега отдаст ответ клиенту спустя время.

В чем задача ? Я хочу наладить поток запросов от бота так, чтобы сколько бы запросов не приходило на вебхук, он будет контролировать лимит ответов для клиентов.
Есть symfony компонент rateLimiter
Документацию почитал и я не совсем понимаю как работает token_bucket policy.
Точнее сказать мне не понятно, как работает данный код.

Что значит reserve(1)->wait() и $limiter->consume(1)->isAccepted(), могу ли я как-то протестировать и получить ошибку слишком много запросов в единицу времени ?

use Symfony\Component\RateLimiter\Storage\InMemoryStorage;
use Symfony\Component\RateLimiter\RateLimiterFactory;

$factory = new RateLimiterFactory([
    'id' => 'login',
    'policy' => 'token_bucket',
    'limit' => 10,
    'rate' => ['interval' => '15 minutes'],
], new InMemoryStorage());

$limiter = $factory->create();

// blocks until 1 token is free to use for this process
$limiter->reserve(1)->wait();
// ... execute the code

// only claims 1 token if it's free at this moment (useful if you plan to skip this process)
if ($limiter->consume(1)->isAccepted()) {
   // ... execute the code
}
  • Вопрос задан
  • 180 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽