8个版本
0.2.1 | 2024年7月23日 |
---|---|
0.2.0 | 2024年7月23日 |
0.1.6 | 2024年7月22日 |
359 在 HTTP服务器
每月738次下载
12KB
165 行
Actix Route Rate Limiter
一个库crate,可以用于向Actix Web应用程序的路由添加限流中间件。
use std::sync::Arc;
use actix_web::{web, App, HttpServer, HttpResponse};
use chrono::Duration;
use actix_route_rate_limiter::{LimiterBuilder, RateLimiter};
#[actix_web::main]
pub async fn main() -> std::io::Result<()> {
// build a limiter
let limiter = LimiterBuilder::new()
.with_duration(Duration::seconds(20)) // default value is one second
.with_num_requests(2) // default value is one request
.build();
HttpServer::new(move || {
App::new()
.wrap(RateLimiter::new(Arc::clone(&limiter)))
.route("/", web::get().to(HttpResponse::Ok))
})
.bind(("0.0.0.0", 12345))?
.run()
.await
}
此crate可以通过定义在指定时间段内将被转发的请求数量和持续时间来包装带有限流逻辑的路由。
如果请求数量超过这个数量,中间件将短路请求,并返回一个带有描述速率限制的头的HTTP 429 - 请求过多
响应。
Retry-After
:速率限制持续时间,从第一个接收到的请求开始,在经过此时间后结束X-RateLimit-Limit
:持续时间内的允许请求数量X-RateLimit-Remaining
:当前持续时间剩余的请求数量X-RateLimit-Reset
:持续时间剩余的秒数
依赖项
~15–28MB
~467K SLoC