Expand description
Low latency, single producer & many consumer (SPMC) ring buffer that works with shared memory. Natively supports variable message sizes.
§Examples
Create Writer
and use claim
to publish a message.
use bcast::RingBuffer;
// create writer
let bytes = [0u8; 1024];
let mut writer = RingBuffer::new(&bytes).into_writer();
// publish first message
let mut claim = writer.claim(5).unwrap();
claim.get_buffer_mut().copy_from_slice(b"hello");
claim.commit();
// publish second message
let mut claim = writer.claim(5).unwrap();
claim.get_buffer_mut().copy_from_slice(b"world");
claim.commit();
Create Reader
and use batch_iter
tp receive messages.
use bcast::RingBuffer;
// create reader
let bytes = [0u8; 1024];
let mut reader = RingBuffer::new(&bytes).into_reader();
let mut iter = reader.batch_iter();
let mut payload = [0u8; 1024];
// read first message
let msg = iter.next().unwrap().unwrap();
let len = msg.read(&mut payload).unwrap();
assert_eq!(b"hello", &payload[..len]);
// read second message
let msg = iter.next().unwrap().unwrap();
let len = msg.read(&mut payload).unwrap();
assert_eq!(b"world", &payload[..len]);
// no more messages
assert!(iter.next().is_none())
Re-exports§
pub use error::Result;
Modules§
- Defines error types.
Structs§
- Iterator that allows to process pending messages in a batch. This is more efficient than iterating over the messages using
receive_next()
on theReader
directly. - Represents region of the
RingBuffer
we can publish message to. - Contains coordinates to some payload at particular point in time. Messages are consumer in a ‘lazily’ way that’s why it’s safe to
clone()
and pass them around. When message is read (consumed) it can result in overrun error if the producer has lapped around. - Wraps
RingBuffer
and allows to receive messages. Multiple readers can be present at any time, they operate independently and are not part of any congestion control flow. As a result, each reader can be overrun by the producer if it’s unable to keep up. - Single producer, many consumer (SPMC) ring buffer backed by shared memory.
- Wraps
RingBuffer
and allows to publish messages. Only single writer should be present at any time.
Constants§
- Ring buffer header size in bytes.
- Metadata buffer size in bytes.
- Null value for
user_defined
field.