#broadcast-channel #message #sent #replay #real-time #receivers #sender

replay-channel

一个广播频道,新的接收者接收所有过去的消息后再接收新的消息

12 个版本

0.1.12 2024 年 3 月 19 日
0.1.11 2024 年 3 月 17 日

#435 in 异步

Download history

每月 454 次下载

Apache-2.0

14KB
210

ReplayChannel

ReplayChannel 是一个 Rust 库,允许您创建一个将消息广播到所有接收者的通道。重要的是,如果稍后添加了新的接收者,他们将会接收到所有之前发送的消息,直到他们赶上发送者。

Ian ClarkeFreenet 项目 开发。

特性

  • 消息重放:新的接收者会接收到所有之前发送的消息,直到他们赶上发送者。
  • 多接收者:支持多个接收者,每个接收者都有自己的消息历史和实时流视图。
  • 异步:设计用于与 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