#pubsub #future #async-stream #sender-receiver

flo_stream

Rust futures 的 Pubsub 和相关流

9 个版本 (破坏性更新)

0.7.0 2021年11月20日
0.6.0 2021年2月8日
0.5.0 2021年1月31日
0.4.0 2019年12月29日
0.1.1 2018年8月7日

#463并发

Download history 110/week @ 2024-04-22 44/week @ 2024-04-29 55/week @ 2024-05-06 59/week @ 2024-05-13 69/week @ 2024-05-20 74/week @ 2024-05-27 73/week @ 2024-06-03 63/week @ 2024-06-10 59/week @ 2024-06-17 70/week @ 2024-06-24 86/week @ 2024-07-01 120/week @ 2024-07-08 121/week @ 2024-07-15 152/week @ 2024-07-22 136/week @ 2024-07-29 126/week @ 2024-08-05

每月 539 次下载
6 Crates 中使用 (4 直接使用)

Apache-2.0

85KB
1K SLoC

flo_stream = "0.7"

flo_stream

flo_stream 是一个提供一些额外实用程序的 crate,用于 Rust 的 futures 库中的流。它提供的主要新功能是一个 "pubsub" 机制 - 一种订阅发送到 futures Sink 更新的方法。这与主 futures 库中提供的 Sender/Receiver 机制在两个关键方面有所不同:可以存在多个接收器,并且在没有订阅者连接时发送的消息将被忽略。

PubSub

提供的 sink 类型是 Publisher。您可以使用 let publisher = Publisher::new(10) 创建一个。这实现了 Sink 特性,因此可以非常类似地发送消息。传入的数字是任何给定订阅者允许的等待消息的最大数量。

可以使用 let subscription = publisher.subscribe() 创建一个订阅。在此调用之后发送到 sink 的任何消息都将转发到所有订阅。订阅是一个 Stream,因此可以像往常一样与其他 futures 库部分交互。

这是一个带有单个订阅者的完整示例

let mut publisher       = Publisher::new(10);
let mut subscriber      = publisher.subscribe();

executor::block_on(async {
    publisher.publish(1).await;
    publisher.publish(2).await;
    publisher.publish(3).await;

    assert!(subscriber.next().await == Some(1));
    assert!(subscriber.next().await == Some(2));
    assert!(subscriber.next().await == Some(3));
});

还可以调用 subscriber.clone() 从现有的订阅中创建一个新的订阅,而不需要保留对发布者的引用。这可以用来减少传递对象所需的工作量,并从调用者那里隐藏实现细节。

依赖关系

~1MB
~17K SLoC