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 在 并发
每月 539 次下载
在 6 个 Crates 中使用 (4 直接使用)
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