Rumah >pembangunan bahagian belakang >tutorial php >Komponen pengehad arus pembilang tersedia untuk PHP Hyperf (konfigurasi pemasangan)

Komponen pengehad arus pembilang tersedia untuk PHP Hyperf (konfigurasi pemasangan)

藏色散人
藏色散人ke hadapan
2022-01-11 15:31:555360semak imbas

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:

  • kenaikan
  • penurunan
  • tambah
  • letak

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 semasa HyperfHttpServerContractRequestInterface 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 menggunakan for, max_attempts dan decay_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!';
}
Kajian yang disyorkan: "

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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam