3 个不稳定版本

0.2.1 2022年5月8日
0.2.0 2022年5月8日
0.1.1 2022年2月28日
0.1.0 2022年2月28日

#7 in #token-bucket

MIT/Apache

37KB
702 代码行

Tocket

crates.io docs.rs build

此库提供了令牌桶算法的实现和一些存储实现。

[dependencies]
tocket = "0.2"

示例

use tocket::{TokenBucket, InMemoryStorage};
use std::sync::Arc;
use std::time::Duration;

fn main() {
    let tb = TokenBucket::new(InMemoryStorage::new(100));
    let tb = Arc::new(tb);

    for i in 0..4 {
        std::thread::spawn({
            let tb = Arc::clone(&tb);
            move || {
                loop {
                    std::thread::sleep(Duration::from_secs(i));
                    
                    match tb.try_acquire_one() {
                        Ok(_) => println!("token acquired, limit not exceeded"),
                        Err(err) => eprintln!("token acquiring failed: {}", err),
                    }
                }
            }
        });
    }
    
    loop {}
}

特性

  • redis-impl - Redis 存储实现
  • distributed-impl - 分布式存储实现

许可协议

根据您的选择,在Apache License, Version 2.0MIT 许可协议下授权。
除非您明确声明,否则根据 Apache-2.0 许可协议定义的,您有意提交以包含在此软件包中的任何贡献,将按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~2–12MB
~133K SLoC