#token-bucket #rate-limiting #stream #rate #synchronous #byte-stream

stream_limiter

基于令牌桶算法的同步流速度限制

8个稳定版本

3.2.0 2023年7月3日
3.1.1 2023年7月3日
3.0.1 2023年6月19日
2.0.0 2023年5月22日
1.0.0 2023年2月24日

#5 in #token-bucket

Download history 306/week @ 2024-03-27 39/week @ 2024-04-03 42/week @ 2024-04-10 90/week @ 2024-04-17 60/week @ 2024-04-24 47/week @ 2024-05-01 39/week @ 2024-05-08 32/week @ 2024-05-15 26/week @ 2024-05-22 38/week @ 2024-05-29 22/week @ 2024-06-05 24/week @ 2024-06-12 6/week @ 2024-06-19 11/week @ 2024-06-26 13/week @ 2024-07-03 22/week @ 2024-07-10

每月下载量 53

MIT/Apache

44KB
1K SLoC

stream_limiter

同步流速度限制。

此crate提供了一个 Limiter 结构体,可用于限制流的读写速率。

此crate基于令牌桶算法。当我们想读取数据并且被速率限制时,数据包不会被丢弃,而是我们会休眠。

示例

    use stream_limiter::Limiter;
    use std::time::Duration;
    use std::io::prelude::*;
    use std::fs::File;

    let mut file = File::open("tests/resources/test.txt").unwrap();
    let mut limiter = Limiter::new(file, 1, Duration::from_secs(1));
    let mut buf = [0u8; 10];
    let now = std::time::Instant::now();
    limiter.read(&mut buf).unwrap();
    assert_eq!(now.elapsed().as_secs(), 9);

lib.rs:

此crate提供了一个 Limiter 结构体,可用于限制流的读写速率。此crate基于令牌桶算法。当我们想读取数据并且被速率限制时,数据包不会被丢弃,而是我们会休眠。示例

use stream_limiter::{Limiter, LimiterOptions};
use std::time::Duration;
use std::io::prelude::*;
use std::fs::File;

let mut file = File::open("test_resources/test.txt").unwrap();
let mut limiter = Limiter::new(file, Some(LimiterOptions::new(1, Duration::from_secs(1), 1)), None);
let mut buf = [0u8; 10];
let now = std::time::Instant::now();
limiter.read(&mut buf).unwrap();
assert_eq!(now.elapsed().as_secs(), 10);

无运行时依赖