有没有办法在《铁 rust 与总督》中创建一个10/10秒的速率限制器?

您可以创建配额:

    let q10 = Quota::with_period(Duration::from_secs(10))
        .unwrap()
        .allow_burst(NonZeroU32::new(10).unwrap());

然而,这每10秒只能补充一次.

而且似乎没有一种方法可以每隔几秒钟就完全补充一次配额,对吗? 唯一的方法似乎是每10秒完全更换一次RateLimiter.

推荐答案

我不相信governor能做你想做的事.不过,The ratelimit crate人似乎是这样.

let ratelimiter = Ratelimiter::builder(10, Duration::from_secs(10))
    .max_tokens(10)
    .build()
    .unwrap();

这段代码将创建一个限制器,允许每10秒发送10个请求,最大突发数为10.这意味着您可以快速连续发出10个请求,但必须等待10秒才能发送更多请求.

Rust相关问答推荐

如何容器化Linux上基于Rust的Windows应用程序的编译过程?

如何在Tauri中将变量从后端传递到前端

自定义结果枚举如何支持`?`/`FromResidual`?

程序在频道RX上挂起

trait 对象指针的生命周期

一旦令牌作为文字使用,声明宏不匹配硬编码值?

str 和 String 的 Rust 生命周期

Rust/Serde/HTTP:序列化`Option`

为什么具有 Vec 变体的枚举没有内存开销?

RAII 模式的 Rust 解决方案,用于在 new() 和 drop() 上修改另一个对象

Rust 中的let是做什么的?

在 RefCell 上borrow

如何在 nom 中构建负前瞻解析器?

使用泛型作为关联类型,没有幻像数据

类型组的通用枚举

需要括号的宏调用中的不必要的括号警告 - 这是编写宏的糟糕方法吗?

如何将 u8 切片复制到 u32 切片中?

为什么 `ref` 会导致此示例*取消引用*一个字段?

令人困惑的错误消息? (解包运算符)

Rust 测试 - 如果 Result 对象不正常,如何详细失败?