ホームページ  >  記事  >  バックエンド開発  >  PHP Hyperf で利用可能な逆電流制限コンポーネント (インストール構成)

PHP Hyperf で利用可能な逆電流制限コンポーネント (インストール構成)

藏色散人
藏色散人転載
2022-01-11 15:31:555300ブラウズ

この記事では、Hyperf に適した逆電流制限コンポーネントを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

説明

BETA

Laravel Cache コンポーネントのレートリミッターを移植しました。

および修正されました\Psr\SimpleCache\CacheInterface が追加されました。次のメソッドが追加されました:

  • increment
  • decrement
  • add
  • put

#インストール##

composer require wilbur-yu/hyperf-cache-ext

##構成 ## 1. キャッシュ設定ファイル

'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 パラメーター参照で使用するために名前付きリミッター配列を収集します。アノテーション アスペクトが実行されると、現在のリクエスト \Hyperf\ HttpServer\Contract\RequestInterface
    インスタンスがこの名前付きクロージャに挿入されます。

    key

    デフォルトは現在のリクエストです
    fullUrl
  • ip . 文字列とクロージャをサポートします。2. 例外設定ファイルに <pre class="brush:php;toolbar:false">\WilburYu\HyperfCacheExt\Exception\Handler\CounterRateLimitException::class</pre>
  • を追加します。オプションで、自分でキャッチすることもできます。例外は自動的に発生します。
getHeaders

メソッドの場合、値は次のようになります: array('X-RateLimit-Limit', 'X-RateLimit-Remaining', 'Retry-After', 'X-RateLimit- Reset')

Use

コントローラーの注釈でカウンター速度制限を使用

#[CounterRateLimitWithRedis(maxAttempts: 5, decayMinutes: 1)]or#[CounterRateLimit(for: "common")]
注釈パラメータは設定ファイル内のパラメータと同じであり、優先レベルは「注釈」>「設定」>「デフォルト」です。

for

max_attempts

、および
decay_ minutes を使用する場合キャッシュ ドライバーが redis でない場合は、

CounterRateLimit
アノテーションを使用できます。それ以外の場合は、

CounterRateLimitWithRedis を直接使用できます。 アノテーション. 他の場所 レート制限を使用する場合、補助関数 counter_limiter() を使用できます。使用方法は # の RateLimiter Facade

と同じです。 ##laravel

。Laravel の電流制限に関するドキュメントを参照してください。<pre class="brush:php;toolbar:false">$executed = counter_limiter()-&gt;attempt(&amp;#39;send-sms:&amp;#39;.$user-&gt;id,2,function(){ // send sms logic }); if (!$executed) { return &amp;#39;Too many messages sent!&amp;#39;; }</pre> 推奨学習:「PHP ビデオ チュートリアル

以上がPHP Hyperf で利用可能な逆電流制限コンポーネント (インストール構成)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。