1 个不稳定版本

0.0.1 2018年12月28日

#24 in #v0


quick_crawler 中使用

MIT 许可证

8KB
60

ratelimit_futures - 将限流器作为 Rust future (v0.1)

这个crate提供了一个与tokio兼容的限流实现(使用ratelimit_meter)。

查看文档以获取详细信息和使用示例。


lib.rs:

为 futures 提供限流。

这个crate将ratelimit_meter crate与futures v0.1(目前由Tokio支持的同一版本)连接起来。

使用 futures 限流的用法与机制

要使用此 crate 的 Future 类型,请使用提供的 Ratelimit::new 函数。它接受一个直接限流器(内存中的限流器实现),并返回一个可以连接到您要执行的实际工作的 Future

use futures::prelude::*;
use futures::future::{self, FutureResult};
use ratelimit_meter::{DirectRateLimiter, LeakyBucket};
use ratelimit_futures::Ratelimit;
use std::num::NonZeroU32;

let mut lim = DirectRateLimiter::<LeakyBucket>::per_second(NonZeroU32::new(1).unwrap());
{
    let mut lim = lim.clone();
    let ratelimit_future = Ratelimit::new(&mut lim);
    let future_of_3 = ratelimit_future.and_then(|_| {
        Ok(3)
    });
}
{
    let mut lim = lim.clone();
    let ratelimit_future = Ratelimit::new(&mut lim);
    let future_of_4 = ratelimit_future.and_then(|_| {
        Ok(4)
    });
}
// 1 second will pass before both futures resolve.

在这个例子中,我们正在构建只有在共享的限流器表示可以开始时才能开始工作的 futures。

您可能可以猜出使用这些限流 futures 的机制

  • 使用 .and_then 将您的任务连接到它们。
  • 为需要计数限流的任务构造一个单一的限流器。您可以使用它们的 Clone 特性来共享它们。
  • 限流 futures 将等待直到达到允许代码继续执行的点。如果共享限流器已经允许另一段代码继续执行,则等待时间将延长。

依赖关系

~200KB