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
每月下载量 53
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);