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
}
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
08 мая 2024, в 17:35
5000 руб./за проект
08 мая 2024, в 17:32
2000 руб./за проект
08 мая 2024, в 17:12
50000 руб./за проект