4 个版本
0.2.2 | 2024 年 7 月 4 日 |
---|---|
0.2.1 | 2024 年 7 月 4 日 |
0.2.0 | 2024 年 7 月 3 日 |
0.1.0 | 2024 年 7 月 3 日 |
#459 在 数据库接口
每月 356 次下载
38KB
688 行
actix-rl
: actix-web
的速率限制器
描述
actix-rl
是为 actix-web
库提供的速率限制中间件。它支持异步处理,并目前提供两种存储选项:内存存储(MemStore
)和 Redis 存储(RedisStore
)。
如果您有其他存储选项,请随时提交 Pull Request。欢迎 PR。
特性
特性 | 组件 | 描述 |
---|---|---|
默认 |
MemStore |
在内存中存储数据 |
redis-store |
RedisStore |
使用来自 redis 的异步连接存储数据 |
用法
用法
- 定义一个
Store
,其中程序存储信息和设置超时。 - 定义一个
Controller
。控制器用于定义中间件响应行为,例如在异常期间如何返回 HTTP 信息。您也可以使用库提供的默认函数,但在大多数情况下,您需要自定义响应以返回必要的限制信息给客户端。 - 最后,使用来自
actix-web
的wrap
函数将Middleware
添加到您的 HTTP 服务器。
示例
您可以在 examples
文件夹中找到示例。
存储
Store
用于存储缓存信息。
以 MemCache
为例
// data timeout for each key is 10 seconds, with 1024 init capacity.
let store = actix_rl::store::MemCache::new(1024, chrono::Duration::seconds(10));
控制器
Controller
是一组函数。要创建一个默认的
let controller = controller::Controller::new();
您可以通过修改 Controller
来确定哪些请求应该进行检查
let controller = controller.with_do_rate_limit(|req| !req.path().start_with("/healthz"));
在这种情况下,只有那些不带前缀 /healthz
的请求将由速率限制器进行检查
有关更多功能,请参阅 Controller
的文档。
速率限制器
定义一个 RateLimiter
和 wrap
来 HTTP 服务器
let rate_limiter = actix_rl::middleware::RateLimitMiddleware::new(
store,
10, // max count is 10, which means max 10 hits per 10 seconds.
controller,
);
然后,将其添加到 actix-web
HTTP 服务器包装中
App::new()
.wrap(rate_limiter)
// ...
依赖项
~15–26MB
~475K SLoC