Skip to main content

PullFanIn

Struct PullFanIn 

Source
pub struct PullFanIn { /* private fields */ }
Expand description

A PULL endpoint that merges messages from a pool of PUSH workers.

Create one with bind, or bind a listener yourself and call accept_workers when you need the bound port before the workers connect (the bench peer does this to print its port).

Implementations§

Source§

impl PullFanIn

Source

pub async fn bind( addr: impl ToSocketAddrs, n_workers: usize, ) -> Result<(TcpListener, Self)>

Bind to addr, accept n_workers PUSH connections, and return the listener alongside the ready fan-in socket.

§Example
use monocoque::zmq::PullFanIn;

let (_listener, mut sink) = PullFanIn::bind("127.0.0.1:5558", 4).await?;
while let Ok(Some(result)) = sink.recv().await {
    // process result
    drop(result);
}
Source

pub async fn bind_with_options( addr: impl ToSocketAddrs, n_workers: usize, options: SocketOptions, ) -> Result<(TcpListener, Self)>

Like bind but applies options to every worker connection.

Source

pub async fn accept_workers( listener: &TcpListener, n_workers: usize, options: SocketOptions, ) -> Result<Self>

Accept n_workers PUSH connections on an already-bound listener.

Useful when the bound address must be read (and announced) before the workers are allowed to connect.

Source

pub async fn recv(&mut self) -> Result<Option<Vec<Bytes>>>

Receive the next message from any worker.

Pops from the local buffer first and only waits on the channel when the buffer is empty. Returns Ok(None) once every worker has disconnected and both the buffer and channel have drained, mirroring PullSocket::recv on a closed connection.

Source

pub fn try_recv(&mut self) -> Result<Option<Vec<Bytes>>>

Try to receive a message without waiting.

Returns Ok(None) when nothing is buffered or queued, even if workers are still connected. Use it to drain the sink after a recv.

Source

pub async fn recv_batch(&mut self) -> Result<Option<Vec<Vec<Bytes>>>>

Receive a burst of merged messages with a single .await.

Returns the locally buffered messages plus every batch already queued from the worker readers, folded into one Vec. Blocks for at least one message when nothing is ready yet. Returning a burst from one .await amortizes the per-await cost for throughput-bound sinks; it is the fan-in counterpart to PullSocket::recv_batch.

Returns Ok(None) once every worker has disconnected and nothing remains.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more