简介
swn-rate-limiter 是一个基于 Node.js 的限流库,可以帮助我们在前端开发中有效地控制请求频率,从而防止服务器过载、保护 API 接口的调用次数等。
它提供了 Token Bucket 和 Leaky Bucket 两种算法模式,支持多种传输协议和定时器选择,可自定义限流器参数。
安装和使用
在你的项目根目录下执行以下命令进行安装:
npm install swn-rate-limiter
在代码中引入:
const rateLimiter = require('swn-rate-limiter');
Token Bucket
Token Bucket 算法是基于令牌桶的实现,它的基本思想就是为每个请求分配一定数量的令牌,如果令牌不足,则请求被无限期地挂起,直到令牌被填满。
使用 Token Bucket 算法方式,代码如下:
-- -------------------- ---- ------- ----- ------- - - ----- -------------- --------- -- -------------- -- ------------- ----- ------------- -------- - ----- ----- - --------------------- --------------------- -- - -- -- --------- ----------- -- - -- ----- ----- ---
参数解释如下:
- mode: 算法模式。
- capacity: 桶的容量,即最多可以积累多少令牌。
- getTokenCount:一次请求所需要的令牌数。
- fillInterval:往桶中填充令牌的频率。
- intervalUnit:定时器单位。
Leaky Bucket
Leaky Bucket 算法也是一种流量控制算法,其基本思想是在本地存储一个“漏斗”,请求进来时从漏斗中取出一定数量的请求并将其流出。假如漏斗已经满了,那么多余请求直接被丢弃。
使用 Leaky Bucket 算法方式,代码如下:
-- -------------------- ---- ------- ----- ------- - - ----- -------------- --------- -- ---------- -- ------------- -------- - ----- ----- - --------------------- --------------------- -- - -- -- --------- ----------- -- - -- ----- ----- ---
参数解释如下:
- mode: 算法模式。
- capacity: 漏斗的容量,即最多可以容纳多少请求。
- leakyRate:流出漏斗的速率。
- intervalUnit:定时器单位。
实例
下面就是一个完整的使用实例。假设我们需要限制用户在每秒钟之内只能连续输错 3 次密码,超过 3 次就不能再试了。
-- -------------------- ---- ------- ----- ------- - - ----- -------------- --------- -- -------------- -- ------------- ----- ------------- -------- - ----- ----- - --------------------- -------- ------------------------ --------- - ------ ----------------------- -- - -- --------- --- --------- - ----- --- --------------- -- ------------ - ------ ----- --- - ----------------------- ----------------------------- ------------- -- ----------------------- ----------------------------- ----- ------------- -- ----------------------- ----------------------------- ------ ------------- -- ----------------------- ----------------------------- ------ ------------- -- ----------------------- ----------------------------- ------
运行结果:
Password is incorrect Password is incorrect Password is incorrect
限流器把前 3 个请求都放行,第 4 个请求被拒绝了。
总结
swn-rate-limiter 是一个方便易用的 Node.js 限流库,提供了 Token Bucket 和 Leaky Bucket 两种算法模式,可以告诉我们如何使用它限制前端请求频率,提高系统的稳定性和安全性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055f1b81e8991b448dcb0a