3个不稳定版本
0.1.0 | 2024年6月19日 |
---|---|
0.0.4 | 2024年3月8日 |
0.0.3 | 2023年10月4日 |
#476 in 异步
183 每月下载量
用于 kraken-async-rs
27KB
374 行
async-rate-limit
一个基本的Tokio限速库,提供两个特性和常用实现。
用法
use tokio::time::{Instant, Duration};
use async_rate_limit::limiters::VariableCostRateLimiter;
use async_rate_limit::sliding_window::SlidingWindowRateLimiter;
#[tokio::main]
async fn main() -> () {
let mut limiter = SlidingWindowRateLimiter::new(Duration::from_secs(1), 5);
for _ in 0..3 {
// these will proceed immediately, spending 3 units
get_lite(&mut limiter).await;
}
// 3/5 units are spent, so this will wait for ~1s to proceed since it costs another 3
get_heavy(&mut limiter).await;
}
// note the use of the `VariableCostRateLimiter` trait, rather than the direct type
async fn get_lite<T>(limiter: &mut T) where T: VariableCostRateLimiter {
limiter.wait_with_cost(1).await;
println!("Lite: {:?}", Instant::now());
}
async fn get_heavy<T>(limiter: &mut T) where T: VariableCostRateLimiter {
limiter.wait_with_cost(3).await;
println!("Heavy: {:?}", Instant::now());
}
依赖项
~2.4–8.5MB
~58K SLoC