replay-channel

Crates.ioreplay-channel
lib.rsreplay-channel
version0.1.12
sourcesrc
created_at2024-03-16 19:53:44.09167
updated_at2024-03-19 16:58:10.359797
descriptionA broadcast channel where new receivers replay all past messages before receiving new ones.
homepage
repositoryhttps://github.com/freenet/replay-channel
max_upload_size
id1175932
size14,574
Ian Clarke (sanity)

documentation

https://docs.rs/replay-channel

README

ReplayChannel

ReplayChannel is a Rust library that lets you create a channel where messages are broadcast to all receivers. Importantly, if a new receiver is added later, they'll get all previously sent messages until they are caught up with the sender.

Developed by Ian Clarke for the Freenet Project.

Features

  • Message Replay: New receivers are sent all previously sent messages until they are caught up with the sender.
  • Multi-Receiver: Supports multiple receivers, each with its own view of the message history and real-time stream.
  • Asynchronous: Designed to be used with Tokio, async-std, or any other async runtime.
  • Efficient: Uses an AppendOnlyVec to store sent messages, avoiding locks.

Memory Usage

ReplayChannel stores all sent messages, so the memory usage is proportional to the number of messages sent. Because of this the number of messages sent should be bounded.

Getting Started

To use ReplayChannel, add it to your project's Cargo.toml:

$ cargo add replay-channel

Usage Example

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");

License

Available under the MIT license.

Commit count: 20

cargo fmt