Struct flo_stream::ExpiringPublisher
source · pub struct ExpiringPublisher<Message> { /* private fields */ }
Expand description
An ‘expiring’ publisher is one that responds to backpressure from its subscribers by expiring the most recent message.
Usually when a subscriber stalls in processing, a publisher will refuse to accept further messages and block. This will avoid blocking by instead expiring messages that cannot be processed.
This is useful in a few situations. One important example is distributing state: say you want to indicate to another thread what your current state is, but if it’s busy you don’t want to wait for it to consume the previous state before you can finish updating the latest state.
Another example is signalling. An ExpiringPublisher<()> can be used to signal that an event has occurred but will not block if all subscribers have not responded in the case where the event occurs multiple times.
Implementations§
source§impl<Message: Clone> ExpiringPublisher<Message>
impl<Message: Clone> ExpiringPublisher<Message>
sourcepub fn new(buffer_size: usize) -> ExpiringPublisher<Message>
pub fn new(buffer_size: usize) -> ExpiringPublisher<Message>
Creates a new expiring publisher with a particular buffer size
Once a subscriber has buffer_size messages, this publisher will start to drop the oldest messages.
sourcepub fn count_subscribers(&self) -> usize
pub fn count_subscribers(&self) -> usize
Counts the number of subscribers in this publisher
Trait Implementations§
source§impl<Message> Drop for ExpiringPublisher<Message>
impl<Message> Drop for ExpiringPublisher<Message>
source§impl<Message: Clone> PublisherSink<Message> for ExpiringPublisher<Message>
impl<Message: Clone> PublisherSink<Message> for ExpiringPublisher<Message>
source§fn subscribe(&mut self) -> Subscriber<Message>
fn subscribe(&mut self) -> Subscriber<Message>
Subscribes to this publisher
Subscribers only receive messages sent to the publisher after they are created.
source§impl<Message: Clone> Sink for ExpiringPublisher<Message>
impl<Message: Clone> Sink for ExpiringPublisher<Message>
source§fn start_send(&mut self, item: Message) -> StartSend<Message, ()>
fn start_send(&mut self, item: Message) -> StartSend<Message, ()>
source§fn poll_complete(&mut self) -> Poll<(), ()>
fn poll_complete(&mut self) -> Poll<(), ()>
source§fn close(&mut self) -> Result<Async<()>, Self::SinkError>
fn close(&mut self) -> Result<Async<()>, Self::SinkError>
source§fn wait(self) -> Wait<Self>where
Self: Sized,
fn wait(self) -> Wait<Self>where
Self: Sized,
source§fn with<U, F, Fut>(self, f: F) -> With<Self, U, F, Fut>where
F: FnMut(U) -> Fut,
Fut: IntoFuture<Item = Self::SinkItem>,
<Fut as IntoFuture>::Error: From<Self::SinkError>,
Self: Sized,
fn with<U, F, Fut>(self, f: F) -> With<Self, U, F, Fut>where
F: FnMut(U) -> Fut,
Fut: IntoFuture<Item = Self::SinkItem>,
<Fut as IntoFuture>::Error: From<Self::SinkError>,
Self: Sized,
source§fn with_flat_map<U, F, St>(self, f: F) -> WithFlatMap<Self, U, F, St>where
F: FnMut(U) -> St,
St: Stream<Item = Self::SinkItem, Error = Self::SinkError>,
Self: Sized,
fn with_flat_map<U, F, St>(self, f: F) -> WithFlatMap<Self, U, F, St>where
F: FnMut(U) -> St,
St: Stream<Item = Self::SinkItem, Error = Self::SinkError>,
Self: Sized,
source§fn sink_map_err<F, E>(self, f: F) -> SinkMapErr<Self, F>where
F: FnOnce(Self::SinkError) -> E,
Self: Sized,
fn sink_map_err<F, E>(self, f: F) -> SinkMapErr<Self, F>where
F: FnOnce(Self::SinkError) -> E,
Self: Sized,
source§fn sink_from_err<E>(self) -> SinkFromErr<Self, E>where
E: From<Self::SinkError>,
Self: Sized,
fn sink_from_err<E>(self) -> SinkFromErr<Self, E>where
E: From<Self::SinkError>,
Self: Sized,
From
for this sink’s
Error
, returning a new sink. Read more