>백엔드 개발 >PHP 튜토리얼 >PHP Hyperf에 사용 가능한 카운터 전류 제한 구성요소(설치 구성)

PHP Hyperf에 사용 가능한 카운터 전류 제한 구성요소(설치 구성)

藏色散人
藏色散人앞으로
2022-01-11 15:31:555359검색

이 글에서는 Hyperf에 적합한 역전류 제한 부품을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

Description

BETA

Laravel Cache 구성 요소의 속도 제한기를 이식했습니다.

PsrSimpleCacheCacheInterface를 추가했습니다.PsrSimpleCacheCacheInterface 进行了补充. 增加了以下方法:

  • increment
  • decrement
  • add
  • put

安装

composer require wilbur-yu/hyperf-cache-ext

配置

1. 修改cache配置文件:

'default' => [
    'driver' => WilburYu\HyperfCacheExt\Driver\RedisDriver::class,
    'packer' => WilburYu\HyperfCacheExt\Utils\Packer\PhpSerializerPacker::class,
    'prefix' => env('APP_NAME', 'skeleton').':cache:',
],
'limiter' => [
    'max_attempts' => 5,  // 最大允许次数
    'decay_minutes' => 1, // 限流单位时间
    'prefix' => 'counter-rate-limit:', // key 前缀
    'for' => [
        'common' => static function (\Hyperf\HttpServer\Contract\RequestInterface $request) {
            return Limit::perMinute(3);
        },
    ],
    'key' => ThrottleRequest::key(),
],
  • for 即对应 Laravel Facade RateLimiter::for(callable),

    在服务启动时, 监听器会收集该命名限制器数组, 供在注解中使用 for 参数引用. 在注解切面执行时, 会将当前请求 HyperfHttpServerContractRequestInterface 实例注入到该命名闭包.

  • key 默认为当前请求 fullUrl + ip. 支持字符串与闭包.

2. 在exceptions配置文件中增加:

\WilburYu\HyperfCacheExt\Exception\Handler\CounterRateLimitException::class

可选, 也可自行捕获, 该异常自带一个 getHeaders 方法, 值为: array(‘X-RateLimit-Limit’, ‘X-RateLimit-Remaining’, ‘Retry-After’, ‘X-RateLimit-Reset’)

使用

在控制器中使用计数器限速注解

#[CounterRateLimitWithRedis(maxAttempts: 5, decayMinutes: 1)]or#[CounterRateLimit(for: "common")]

注解参数同配置文件, 优先级为注解>配置>默认.
使用 for 时, max_attemptsdecay_minutes 不起作用.

如果你的缓存驱动不是 redis, 可以使用 CounterRateLimit 注解,反之则直接使用 CounterRateLimitWithRedis 注解即可.

在其他地方使用限速时, 可以使用辅助函数 counter_limiter(), 使用方法同 laravel中的 RateLimiter Facade

  • 증가 li>
  • 감소
  • 추가
  • 넣기

Installation

$executed = counter_limiter()->attempt('send-sms:'.$user->id,2,function(){
    // send sms logic
});
if (!$executed) {
    return 'Too many messages sent!';
}

🎜Configuration🎜🎜🎜1. 캐시 구성 파일 수정:🎜rrreee
  • for Laravel Facade RateLimiter::for(callable)에 해당합니다.🎜🎜서비스가 시작되면 리스너는 주석을 위해 명명된 제한 배열을 수집합니다. for 매개변수 참조입니다. 주석 측면이 실행되면 현재 요청 <code>HyperfHttpServerContractRequestInterface 인스턴스가 명명된 클로저에 주입됩니다.🎜🎜
  • key 기본값은 현재 요청 fullUrl + ip입니다. 문자열 및 클로저를 지원합니다.
🎜2 예외 구성 파일에 추가됨: 🎜rrreee🎜🎜 선택사항입니다. 이 예외는 getHeaders 메소드와 함께 제공되며 값은 array('X-RateLimit-Limit', 'X-RateLimit-Remaining' , 'Retry-After)입니다. ', 'X-RateLimit-Reset')🎜🎜🎜🎜사용 🎜🎜🎜컨트롤러의 카운터 속도 제한 주석 사용 🎜rrreee🎜🎜The 주석 매개변수는 구성 파일의 매개변수와 동일하며 우선순위는 Annotation>Configuration>Default입니다.
for를 사용하는 경우 max_attemptsdecay_ Minutes 가 작동하지 않습니다. 🎜🎜🎜캐시 드라이버가 redis가 아닌 경우 CounterRateLimit 주석을 사용할 수 있습니다. 그렇지 않으면 CounterRateLimitWithRedis code> 주석을 직접 사용하면 됩니다.🎜🎜다른 곳에서 속도 제한을 사용할 때는 보조 함수인 <code>counter_limiter()를 사용하면 됩니다. 사용법은 RateLimiter Facade와 동일합니다. code> laravel 에서 Laravel 현재 제한 문서🎜rrreee🎜권장 학습: "🎜PHP 비디오 튜토리얼🎜"🎜을 참조할 수 있습니다.

위 내용은 PHP Hyperf에 사용 가능한 카운터 전류 제한 구성요소(설치 구성)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제