12 个版本
0.1.12 | 2024 年 3 月 19 日 |
---|---|
0.1.11 | 2024 年 3 月 17 日 |
#435 in 异步
每月 454 次下载
14KB
210 行
ReplayChannel
ReplayChannel
是一个 Rust 库,允许您创建一个将消息广播到所有接收者的通道。重要的是,如果稍后添加了新的接收者,他们将会接收到所有之前发送的消息,直到他们赶上发送者。
由 Ian Clarke 为 Freenet 项目 开发。
特性
- 消息重放:新的接收者会接收到所有之前发送的消息,直到他们赶上发送者。
- 多接收者:支持多个接收者,每个接收者都有自己的消息历史和实时流视图。
- 异步:设计用于与 Tokio、async-std 或任何其他异步运行时一起使用。
- 高效:使用 AppendOnlyVec 存储已发送的消息,避免使用锁。
内存使用
ReplayChannel
存储所有已发送的消息,因此内存使用量与发送的消息数量成正比。因此,应限制发送的消息数量。
入门
要使用 ReplayChannel
,将其添加到项目的 Cargo.toml
中。
$ cargo add replay-channel
用法示例
let replay_channel = ReplayChannel::new();
let sender = replay_channel.sender();
sender.send("message 1");
sender.send("message 2");
let mut receiver = replay_channel.receiver();
assert_eq!(receiver.receive().await, "message 1");
assert_eq!(receiver.receive().await, "message 2");
let mut new_receiver = replay_channel.receiver();
assert_eq!(new_receiver.receive().await, "message 1");
assert_eq!(new_receiver.receive().await, "message 2");
sender.send("message 3");
assert_eq!(new_receiver.receive().await, "message 3");
许可证
可在 MIT 许可证 下获得。
依赖关系
~2.4–8.5MB
~58K SLoC