Giter Site home page Giter Site logo

webman-ratelimit's Introduction

sunsgne

sunsgne/rate-limit

🐬 A PHP implementation of current limiting middleware for webman service HTTP-API 🐬

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

webman 服务限流

基于illuminate/redis 的令牌桶限流中间件

安装

composer require sunsgne/rate-limit

使用

webman中使用

$moreRateLimit = Container::get(MoreRateLimitHandler::class);

$capacity       =  60;
$seconds        =  60;
$customerHandle = [
    'class'       => \support\Response::class,
    'constructor' => [
        429,
        array(),
        json_encode(['success' => false, 'msg' => '请求次数太频繁'], 256),
    ],
];


if (false === $moreRateLimit->handle(intval($capacity), intval($seconds))) {
    $newClass = $customerHandle['class'];
    return new $newClass(... \array_values($customerHandle['constructor']));
}
return $handler($request);

直接使用

$moreRateLimit = new \sunsgne\middleware\MoreRateLimit();
$capacity       =  60;
$seconds        =  60;
$customerHandle = [
    'class'       => \support\Response::class,
    'constructor' => [
        429,
        array(),
        json_encode(['success' => false, 'msg' => '请求次数太频繁'], 256),
    ],
];


if (false === $moreRateLimit->handle(intval($capacity), intval($seconds))) {
    $newClass = $customerHandle['class'];
    return new $newClass(... \array_values($customerHandle['constructor']));
}

参数示例

参数名 示例 说明
capacity 60 “桶”可以容纳的请求数
seconds 60 “桶”完全重新装满所需的时间
concurrency true 开启并发限流
cost 1 “桶”此操作使用的令牌数

测试说明

不含数据库查询

进程数24,moreRateLimit,无业务逻辑

并发数 平均值(ms) 中位数(ms) 最小值(ms) 最大值(ms) 吞吐量
101 13 5 4 215 101.1
1001 241 244 49 428 952.4
10001 1600 2140 0 3249 1643.0

进程数24,RateLimit,无业务逻辑

并发数 平均值(ms) 中位数(ms) 最小值(ms) 最大值(ms) 吞吐量
101 7.0 7 6 11 104.1
1001 18 15 4.0 123 983.4
10001 1820 2359 0 3240 1793.0

数据库查询

进程数24,moreRateLimit

并发数 平均值(ms) 中位数(ms) 最小值(ms) 最大值(ms) 吞吐量
101 351 302 4 1019 80.1

进程数24,RateLimit

并发数 平均值(ms) 中位数(ms) 最小值(ms) 最大值(ms) 吞吐量
101 224 51 10 1004 70.1

更新记录

1.1.3 - 2022-07-06

新增
  • redis 使用 lua 脚本加锁

webman-ratelimit's People

Contributors

sunsgneayo avatar

Stargazers

黄尚 avatar  avatar

Watchers

Kostas Georgiou avatar  avatar

Forkers

new123-ui

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.