#速率限制 # #元素 #限制 #延迟 #tokio #定制

stream-rate-limiter

适用于 Tokio 流的速率限制器

6 个版本

0.4.0 2024年1月11日
0.3.1 2023年7月23日
0.2.2 2023年7月18日

#336文本处理 分类中

Download history 69/week @ 2024-03-13 151/week @ 2024-03-20 372/week @ 2024-03-27 251/week @ 2024-04-03 160/week @ 2024-04-10 188/week @ 2024-04-17 430/week @ 2024-04-24 89/week @ 2024-05-01 116/week @ 2024-05-08 101/week @ 2024-05-15 130/week @ 2024-05-22 75/week @ 2024-05-29 117/week @ 2024-06-05 54/week @ 2024-06-12 698/week @ 2024-06-19 137/week @ 2024-06-26

每月下载量 1,013
用于 3 包(2 个直接使用)

MIT 许可协议

190KB
231 行代码(不含注释)

stream-rate-limiter

流组合器

.rate_limiter(opt: RateLimitOptions)

提供了一种使用恒定间隔限制流元素速率的方法。它增加了一些定制化选项,在标准解决方案(tokio-timer)中无法访问流延迟的情况下。

在使用此库之前,请考虑使用 tokio-timer 包(您可以查看 tokio_interval 示例)。

如果您需要以恒定间隔限制流速率,并添加额外的定制化(在流延迟情况下增加永久流延迟,防止在巨大波动后洪水般地填充流)。

例如,您想要以每秒1个元素的恒定速率产生一个元素流。您可以使用此库将速率限制设置为1个元素,例如接受1秒的延迟。因此,如果您的流在类似两秒的时间内卡住,您的事件不会洪水般地发生,而是以每秒一个元素的速率快速返回。您还可以在延迟太大时做出反应并关闭流。

案例分析

x 轴是元素编号,y 轴是时间,元素编号 40 被模拟为卡住 2 秒)

当您想在故障后延迟流时

stream::iter(0..101)
    .rate_limit(
        RateLimitOptions::empty()
        .with_min_interval_sec(0.02)
        .with_interval_sec(0.1)
        .with_allowed_slippage_sec(0.5)
        .on_stream_delayed(|sdi| StreamBehavior::Delay(sdi.current_delay)),
    )

alt text

当您想允许流在故障后赶上时(继续选项)

stream::iter(0..101)
    .rate_limit(
        RateLimitOptions::empty()
            .with_min_interval_sec(0.02)
            .with_interval_sec(0.1)
            .with_allowed_slippage_sec(0.5)
            .on_stream_delayed(|_sdi| StreamBehavior::Continue),
    )

alt text

当您想在故障后停止流时(停止选项):请注意,最后一个元素可能会出现,这取决于延迟是在 rate_limit 之前还是之后。故障可能发生在流的任何一边。此扩展 (.rate_limit) 不区分故障发生在何处。

stream::iter(0..101)
.rate_limit(
    RateLimitOptions::empty()
        .with_min_interval_sec(0.02)
        .with_interval_sec(0.1)
        .with_allowed_slippage_sec(0.5)
        .on_stream_delayed(|_sdi| StreamBehavior::Stop),
    )

alt text

依赖项

~2–3MB
~47K SLoC