#throttle #throttling #rate-limiting #resources #tps

神秘裤子-节流

简单的节流实现,使速率限制变得容易

7 个版本

使用旧的 Rust 2015

0.2.5 2018年9月5日
0.2.4 2018年9月5日
0.2.3 2018年6月11日
0.1.0 2018年6月9日

#throttling 中排名 #7

BSD-2-Clause

14KB
106

节流

Crates.io Documentation Build Status

一个简单、可配置的节流,用于减缓代码。你什么时候需要减缓代码?为了避免资源争用和下游服务的过载。

// simple throttle configured for 10 TPS
let mut throttle = Throttle::new_tps_throttle(10.0);

let iteration_start = Instant::now();

// the first one is free!
throttle.acquire(());

// the first iteration is free, subsequent iterations
// will be slowed down to a rate of 10 TPS, or one iteration
// every 100 milliseconds
for _i in 0..10 {
    throttle.acquire(());
}

println!("elapsed time: {:?}", iteration_start.elapsed());

assert_eq!(iteration_start.elapsed().as_secs() == 1, true);

节流基于函数式接口,因此它可以超越恒定的 tps 速率限制,根据程序的条件实现可变速率的节流。

let mut throttle = Throttle::new_variable_throttle(
    |iteration: u32, _| Duration::from_millis(arg));

let iteration_start = Instant::now();

// the first iteration is free, subsequent iterations
// will be slowed down
for i in 0..5 {
    throttle.acquire(i * 100);
}

assert_eq!(iteration_start.elapsed().as_secs() == 1, true);

许可证

我希望无论你是谁,你在做什么,或者你在哪个环境中工作,你都能使用这个软件 - 希望你用它做好事而不是坏事!为此,节流在 2-clause BSD 许可证下发布,其他许可证可按请求提供。快乐的编码!

无运行时依赖