1个不稳定版本
0.1.4 | 2021年4月1日 |
---|---|
0.1.3 |
|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#1628 in Rust模式
10KB
125 行
ratelimit_rs
-- 使用 ratelimit::Bucket;
ratelimit包提供了一个高效的令牌桶实现。请参阅http://en.wikipedia.org/wiki/Token_bucket。
提交错误 请参阅https://github.com/jimizai/ratelimit_rs/issues。我会及时处理。
用法
struct Bucket
Bucket表示一个以预定速率填充的令牌桶。可以对Bucket上的方法进行并发调用。
let bucket = Bucket::new(fill_interval: Duration, capacity: u64, quantum: u64, available_tokens: u64);
Bucket::new返回一个新的令牌桶,以每fillInterval填充一个令牌的速率填充,最大容量为给定的容量。两个参数都必须是正数。桶最初是满的。
fn take_available
bucket.take_available(count: u64) -> u64;
TakeAvailable立即从桶中取出最多count个可用的令牌。它返回移除的令牌数,如果没有可用的令牌则返回零。它不会阻塞。
fn take_max_duration
bucket.take_max_duration(count: u64, max_wait: Duration) -> (Duration, bool);
TakeMaxDuration是take,但它只会从桶中取出令牌,如果等待令牌的时间不大于maxWait。
如果取令牌需要超过maxWait的时间,它将不执行任何操作并返回false,否则它返回调用者应等待直到令牌实际可用的时间,并返回true。
fn wait_max_duration
bucket.wait_max_duration(count: u64, max_wait: Duration) -> bool;
WaitMaxDuration类似于Wait,但它只会取出桶中的令牌,如果需要等待的时间不大于maxWait。它报告是否从桶中移除了任何令牌。如果没有移除任何令牌,它将立即返回。