1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/imiphp-imi-rate-limit

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

imi-rate-limit

Latest Version Php Version Swoole Version IMI License

介绍

imi-rate-limit — это компонент ограничения скорости для фреймворка imi, разработанный на основе bandwidth-throttle/token-bucket.

Этот компонент поддерживает только использование Redis в качестве промежуточного программного обеспечения и может ограничивать скорость методов и интерфейсов, устанавливая общую ёмкость, количество токенов, генерируемых за единицу времени, и количество токенов, вычитаемых при каждом использовании.

Composer

Проект можно установить с помощью composer, следуя правилам автоматической загрузки psr-4. Добавьте следующее содержимое в ваш файл composer.json:

{
    "require": {
        "imiphp/imi-rate-limit": "~1.0"
    }
}

Затем выполните команду composer update для установки.

Использование

В файле проекта config/config.php настройте:

[
    'components'    =>  [
        // 引入本组件
        'RateLimit'    =>  'Imi\RateLimit',
    ],
    'pools'    =>    [
        // 一定得要配置 Redis 连接池才可以用
    ],
    'redis' =>  [
        'defaultPool'   =>  'redis连接池名称',
    ],
]

Используйте:

/**
 * Ограничивает одновременный доступ до 3 раз в секунду.
 *
 * @Action
 * 
 * @RateLimit(name="test1", capacity=3)
 *
 * @return void
 */
public function test1()
{
    return [
        'data'  =>  'test1',
    ];
}

/**
 * Ограничивает одновременный доступ до одного раза в секунду и ожидает снятия ограничения перед продолжением выполнения. Время ожидания составляет 1 секунду.
 *
 * @Action
 * 
 * @RateLimit(name="test2", capacity=1)
 * @BlockingConsumer(1)
 *
 * @return void
 */
public function test2()
{
    return [
        'data'  =>  'test2',
    ];
}

/**
 * Общая ёмкость составляет 1000, каждый миллисекунду добавляется 1 токен, а при каждом вызове вычитается 500 токенов.
 * 
 * Пользовательская обработка ограничений.
 *
 * @Action
 * 
 * @RateLimit(name="test3", capacity=1000, fill=1, unit="millisecond", deduct=500, callback="\ImiDemo\HttpDemo\Util\RateLimitParser::parse")
 *
 * @return void
 */
public function test3()
{
    return [
        'data'  =>  'test3',
    ];
}

/**
 * Ручной вызов ограничения скорости.
 * 
 * Общая ёмкость составляет 1000, каждый миллисекунда добавляется 1 токен, при каждом вызове вычитается 500 токенов.
 *
 * @Action
 * 
 * @return void
 */
public function test4()
{
    if(true !== $result = RateLimiter::limit('test4', 1000, function(){
        // Возвращаемое значение пользовательского обратного вызова будет возвращено как исходное возвращаемое значение метода.
        return [
            'message'   =>  'Пользовательский возврат при срабатывании ограничения скорости',
        ];
    }, 1, 'millisecond', 500))
    {
        return $result;
    }
    return [
        'data'  =>  'test4',
    ];
}

/**
 * Ручной вызов ограничения скорости.
 * 
 * Ограничение одновременного доступа до одного раза в секунду, ожидание снятия ограничения перед выполнением. Время ожидания составляет одну секунду.
 *
 * @Action
 * 
 * @return void
 */
public function test5()
{
    if(true !== $result = RateLimiter::limitBlock('test5', 1, function(){
        // Возвращаемое значение пользовательского обратного вызова будет возвращено как исходное возвращаемое значение метода.
        return [
            'message'   =>  'Пользовательское сообщение при срабатывании ограничения скорости',
        ];
    }, 1, 1, 'second', 1))
    {
        return $result;
    }
    return [
        'data'  =>  'test5',
    ];
}

Бесплатная техническая поддержка

QQ группа: 17916227 ![Нажмите, чтобы присоединиться к группе](https://pub.idqqimg.com/wpa/images/group.png «Нажмите, чтобы присоединиться к группе»), если у вас есть вопросы, вам помогут и исправят ошибки.

Среда выполнения

  • PHP >= 7.1
  • Composer
  • Swoole >= 4.1.0

Информация о лицензии

imi-rate-limit распространяется под лицензией MIT и доступен для бесплатного использования.

Пожертвования

Открытый исходный код не требует прибыли, сколько бы ни было, это всё от души, жизнь непроста, так что просто плывите по течению...

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

IMI-rate-limit — это компонент ограничения скорости в рамках IMI, разработанный на основе bandwidth-throttle/token-bucket. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/imiphp-imi-rate-limit.git
git@api.gitlife.ru:oschina-mirror/imiphp-imi-rate-limit.git
oschina-mirror
imiphp-imi-rate-limit
imiphp-imi-rate-limit
master