Artikel ini memperkenalkan anda kepada komponen pengehad arus kaunter yang sesuai untuk Hyperf. Ia mempunyai nilai rujukan tertentu Rakan-rakan yang memerlukan boleh merujuk kepadanya.
Penjelasan
BETA
Memindahkan pengehad kadar komponen Cache Laravel.
dan PsrSimpleCacheCacheInterface
telah ditambah. Kaedah berikut telah ditambah:
Pemasangan
composer require wilbur-yu/hyperf-cache-ext
Konfigurasi
Ubah suai fail konfigurasi 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
sepadan dengan Laravel Facade
RateLimiter::for(callable)
,Apabila perkhidmatan bermula, pendengar akan mengumpul tatasusunan pengehad yang dinamakan untuk digunakan dalam anotasi
for
parameter rujukan. Apabila aspek anotasi dilaksanakan, permintaan semasaHyperfHttpServerContractRequestInterface
akan disuntik ke dalam penutup yang dinamakan
key
lalai kepada permintaan semasa fullUrl
ip
. . Menyokong rentetan dan penutupan 2 Tambah:
\WilburYu\HyperfCacheExt\Exception\Handler\CounterRateLimitException::class
dalam fail konfigurasi pengecualian, anda juga boleh menangkap pengecualian ini sendiri kaedah
getHeaders
, nilainya ialah: array('X-RateLimit-Limit', 'X-RateLimit-Remaining', 'Retry-After', 'X-RateLimit-Reset')
Gunakan
untuk menggunakan anotasi had laju kaunter dalam pengawal
#[CounterRateLimitWithRedis(maxAttempts: 5, decayMinutes: 1)]or#[CounterRateLimit(for: "common")]
parameter anotasi adalah sama dengan konfigurasi fail, keutamaan Lalai untuk anotasi >Konfigurasi>
Apabila menggunakanfor
,max_attempts
dandecay_minutes
tidak mempunyai kesan.
Jika pemacu cache anda bukan redis
, anda boleh menggunakan CounterRateLimit
anotasi, jika tidak, gunakan CounterRateLimitWithRedis
anotasi secara langsung
Apabila menggunakan had laju di tempat lain, anda boleh menggunakan fungsi tambahan counter_limiter()
, dan kaedah penggunaannya adalah sama seperti <🎜. > dalam laravel
Anda boleh merujuk kepada dokumen pengehad semasa Laravel RateLimiter Facade
$executed = counter_limiter()->attempt('send-sms:'.$user->id,2,function(){ // send sms logic }); if (!$executed) { return 'Too many messages sent!'; }
Tutorial Video PHP"
Atas ialah kandungan terperinci Komponen pengehad arus pembilang tersedia untuk PHP Hyperf (konfigurasi pemasangan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!