この記事では、Hyperf に適した逆電流制限コンポーネントを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
説明
BETA
Laravel Cache コンポーネントのレートリミッターを移植しました。
および修正されました\Psr\SimpleCache\CacheInterface
が追加されました。次のメソッドが追加されました:
#インストール##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
を変更します。これは、RateLimiter::for(callable)# に対応します。 ##,
サービスが開始されると、リスナーはアノテーション
for パラメーター参照で使用するために名前付きリミッター配列を収集します。アノテーション アスペクトが実行されると、現在のリクエスト
\Hyperf\ HttpServer\Contract\RequestInterfaceインスタンスがこの名前付きクロージャに挿入されます。fullUrlデフォルトは現在のリクエストです
key
. 文字列とクロージャをサポートします。
2. 例外設定ファイルに <pre class="brush:php;toolbar:false">\WilburYu\HyperfCacheExt\Exception\Handler\CounterRateLimitException::class</pre>
メソッドの場合、値は次のようになります: 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アノテーションを使用できます。それ以外の場合は、、および
CounterRateLimit
decay_ minutesを使用する場合
キャッシュ ドライバーが
redis
でない場合は、
CounterRateLimitWithRedis を直接使用できます。 アノテーション.
他の場所 レート制限を使用する場合、補助関数
counter_limiter() を使用できます。使用方法は # の
RateLimiter Facade
。Laravel の電流制限に関するドキュメントを参照してください。<pre class="brush:php;toolbar:false">$executed = counter_limiter()->attempt(&#39;send-sms:&#39;.$user->id,2,function(){
// send sms logic
});
if (!$executed) {
return &#39;Too many messages sent!&#39;;
}</pre>
推奨学習:「PHP ビデオ チュートリアル
」
以上がPHP Hyperf で利用可能な逆電流制限コンポーネント (インストール構成)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。