Heim  >  Artikel  >  Backend-Entwicklung  >  Komponente zur Gegenstrombegrenzung für PHP Hyperf verfügbar (Installationskonfiguration)

Komponente zur Gegenstrombegrenzung für PHP Hyperf verfügbar (Installationskonfiguration)

藏色散人
藏色散人nach vorne
2022-01-11 15:31:555313Durchsuche

Dieser Artikel stellt Ihnen die für Hyperf geeignete Gegenstrombegrenzungskomponente vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Beschreibung

BETA

Der Ratenbegrenzer der Laravel-Cache-Komponente wurde portiert.

und PsrSimpleCacheCacheInterface wurden die folgenden Methoden hinzugefügt: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

  • inkrementieren
  • dekrementieren
  • add
  • put
span>

Installation

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

🎜Konfiguration🎜🎜🎜1. Cache-Konfigurationsdatei ändern:🎜rrreee
  • für code> entspricht <code>Laravel Facade RateLimiter::for(callable),🎜🎜Wenn der Dienst startet, sammelt der Listener das benannte Limiter-Array zur Annotation. Verwenden Sie for Parameterreferenz. Wenn der Annotationsaspekt ausgeführt wird, wird die aktuelle Anforderungsinstanz HyperfHttpServerContractRequestInterface in den benannten Abschluss eingefügt.🎜🎜
  • key Standardmäßig wird die aktuelle Anforderung fullUrl + ip verwendet. Unterstützt Zeichenfolgen und Verschlüsse.
🎜2 In der Ausnahmekonfigurationsdatei hinzugefügt: 🎜rrreee🎜 🎜Optional, Sie können es auch selbst abfangen. Diese Ausnahme kommt mit einer getHeaders-Methode, der Wert ist: array('X-RateLimit-Limit', 'X-RateLimit-Remaining' , 'Retry- After', 'X-RateLimit-Reset')🎜🎜🎜🎜Verwenden 🎜🎜🎜Verwenden Sie die Anmerkung zur Zählerratenbegrenzung im Controller 🎜rrreee🎜🎜 Die Annotationsparameter sind die gleichen wie in der Konfigurationsdatei und die Priorität ist Annotation>Configuration>Default.
Bei Verwendung von for, max_attempts und Decay_minutes funktioniert nicht. 🎜🎜🎜Wenn Ihr Cache-Treiber nicht <code>redis ist, können Sie die Annotation CounterRateLimit verwenden /code> Annotation direkt.🎜🎜Wenn Sie die Ratenbegrenzung an anderen Stellen verwenden, können Sie die Hilfsfunktion counter_limiter() verwenden. Die Verwendungsmethode ist die gleiche wie bei RateLimiter Facade in <code>laravel können Sie sich auf das Dokument zur aktuellen Beschränkung von Laravel beziehen🎜rrreee🎜Empfohlene Studie: „🎜PHP Video Tutorial🎜“🎜

Das obige ist der detaillierte Inhalt vonKomponente zur Gegenstrombegrenzung für PHP Hyperf verfügbar (Installationskonfiguration). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen