#流量限制 #actix-web中间件 #actix

actix_route_rate_limiter

Actix Web中间件,用于路由限流

8个版本

0.2.1 2024年7月23日
0.2.0 2024年7月23日
0.1.6 2024年7月22日

359HTTP服务器

Download history 612/week @ 2024-07-20 126/week @ 2024-07-27

每月738次下载

MIT/Apache

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:持续时间剩余的秒数

关于Actix Web的App.wrap()文档

依赖项

~15–28MB
~467K SLoC