easyswoole/atomic-limit

An efficient swoole framework

Maintainers

👁 kiss291323003

Package info

github.com/easy-swoole/atomic-limit

Homepage

pkg:composer/easyswoole/atomic-limit

Statistics

Installs: 9 188

Dependents: 1

Suggesters: 0

Stars: 5

Open Issues: 1

2.0.0 2020-12-15 14:14 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

Apache-2.0 7a2a4d3d09c1db1845512b2049af3a2b33c64b77

  • YF <291323003.woop@qq.com>

frameworkasyncswooleeasyswoole

This package is auto-updated.

Last update: 2026-06-16 01:54:38 UTC


README

Easyswoole提供了一个基于Atomic计数器的限流器。

原理

通过限制某一个时间周期内某个token的总请求数,从而实现基础限流。

安装

composer require easyswoole/atomic-limit

示例代码

以经典的暴力CC攻击防护为例子。我们可以限制一个ip-url的qps访问。

use EasySwoole\AtomicLimit\AtomicLimit;
$limit = new AtomicLimit();

$http = new swoole_http_server("127.0.0.1", 9501);
/** 为方便测试,限制设置为3 */
$limit->setLimitQps(3);
$limit->attachServer($http);

$http->on("request", function ($request, $response)use($http,$limit) {
 $ip = $http->getClientInfo($request->fd)['remote_ip'];
 $requestUri = $request->server['request_uri'];
 $token = $ip.$requestUri;
 /** access函数允许单独对某个token指定qps */
 if($limit->access($token)){
 $response->write('request accept');
 }else{
 $response->write('request refuse');
 }
 $response->end();
});

$http->start();