Struct Client

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

A Client socket is used for advanced request-reply messaging.

Client sockets are threadsafe and can be used from multiple threads at the same time. Note that replies from a Server socket will go to the first client thread that calls recv. If you need to get replies back to the originating thread, use one Client socket per thread.

When a Client socket is connected to multiple sockets, outgoing messages are distributed between connected peers on a round-robin basis. Likewise, the Client socket receives messages fairly from each connected peer.

§Mute State

When Client socket enters the mute state due to having reached the high water mark, or if there are no peers at all, then any send operations on the socket shall block until the mute state ends or at least one peer becomes available for sending; messages are not discarded.

§Summary of Characteristics

CharacteristicValue
Compatible peer socketsServer
DirectionBidirectional
Send/receive patternUnrestricted
Outgoing routing strategyRound-robin
Incoming routing strategyFair-queued
Action in mute stateBlock

§Example

use libzmq::{prelude::*, *};

// Use a system assigned port.
let addr: TcpAddr = "127.0.0.1:*".try_into()?;

let server = ServerBuilder::new()
    .bind(addr)
    .build()?;

// Retrieve the addr that was assigned.
let bound = server.last_endpoint()?;

let client = ClientBuilder::new()
    .connect(bound)
    .build()?;

// Send a string request.
client.send("tell me something")?;

// Receive the client request.
let msg = server.recv_msg()?;
let id = msg.routing_id().unwrap();

// Reply to the client.
server.route("it takes 224 bits to store a i32 in java", id)?;

// We send as much replies as we want.
server.route("also don't talk to me", id)?;

// Retreive the first reply.
let mut msg = client.recv_msg()?;
// And the second.
client.recv(&mut msg)?;

Implementations§

Source§

impl Client

Source

pub fn new() -> Result<Self, Error>

Create a Client socket from the global context

§Returned Error Variants
Source

pub fn with_ctx(handle: CtxHandle) -> Result<Self, Error>

Create a Client socket associated with a specific context from a CtxHandle.

§Returned Error Variants
Source

pub fn ctx(&self) -> CtxHandle

Returns the handle to the Ctx of the socket.

Trait Implementations§

Source§

impl Clone for Client

Source§

fn clone(&self) -> Client

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Client

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> From<&'a Client> for Pollable<'a>

Source§

fn from(client: &'a Client) -> Self

Converts to this type from the input type.
Source§

impl Heartbeating for Client

Source§

fn heartbeat(&self) -> Option<Heartbeat>

Returns a the socket’s heartbeating configuration.
Source§

fn set_heartbeat(&self, maybe: Option<Heartbeat>) -> Result<(), Error>

Sets the socket’s heartbeating configuration.
Source§

impl PartialEq for Client

Source§

fn eq(&self, other: &Client) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RecvMsg for Client

Source§

fn recv(&self, msg: &mut Msg) -> Result<(), Error>

Retreive a message from the inbound socket queue. Read more
Source§

fn try_recv(&self, msg: &mut Msg) -> Result<(), Error>

Try to retrieve a message from the inbound socket queue without blocking. Read more
Source§

fn recv_msg(&self) -> Result<Msg, Error>

A convenience function that allocates a Msg with the same properties as recv.
Source§

fn try_recv_msg(&self) -> Result<Msg, Error>

A convenience function that allocates a Msg with the same properties as try_recv.
Source§

fn recv_hwm(&self) -> Result<i32, Error>

The high water mark for incoming messages on the specified socket. Read more
Source§

fn set_recv_hwm(&self, hwm: i32) -> Result<(), Error>

Set the high water mark for inbound messages on the specified socket. Read more
Source§

fn recv_timeout(&self) -> Result<Period, Error>

The timeout for [recv] on the socket. Read more
Source§

fn set_recv_timeout<P>(&self, period: P) -> Result<(), Error>
where P: Into<Period>,

Sets the timeout for [recv] on the socket. Read more
Source§

impl SendMsg for Client

Source§

fn send<M>(&self, msg: M) -> Result<(), Error<Msg>>
where M: Into<Msg>,

Push a message into the outgoing socket queue. Read more
Source§

fn try_send<M>(&self, msg: M) -> Result<(), Error<Msg>>
where M: Into<Msg>,

Try to push a message into the outgoing socket queue without blocking. Read more
Source§

fn send_hwm(&self) -> Result<i32, Error>

The high water mark for outbound messages on the specified socket. Read more
Source§

fn set_send_hwm(&self, hwm: i32) -> Result<(), Error>

Set the high water mark for outbound messages on the specified socket. Read more
Source§

fn send_timeout(&self) -> Result<Period, Error>

Sets the timeout for [send] on the socket. Read more
Source§

fn set_send_timeout<P>(&self, period: P) -> Result<(), Error>
where P: Into<Period>,

Sets the timeout for [send] on the socket. Read more
Source§

impl Socket for Client

Source§

fn connect<E>(&self, endpoint: E) -> Result<(), Error>
where E: Into<Endpoint>,

Schedules a connection to a Endpoint. Read more
Source§

fn bind<E>(&self, endpoint: E) -> Result<(), Error>
where E: Into<Endpoint>,

Schedules a bind to a Endpoint and then accepts incoming connections. Read more
Source§

fn disconnect<E>(&self, endpoint: E) -> Result<(), Error>
where E: Into<Endpoint>,

Disconnect the socket from a Endpoint. Read more
Source§

fn unbind<I, E>(&self, endpoint: E) -> Result<(), Error>
where E: Into<Endpoint>,

Unbind the socket from a Endpoint. Read more
Source§

fn last_endpoint(&self) -> Result<Endpoint, Error>

Retrieve the last endpoint connected or bound to. Read more
Source§

fn mechanism(&self) -> Mechanism

Returns the socket’s Mechanism. Read more
Source§

fn set_mechanism<M>(&self, mechanism: M) -> Result<(), Error>
where M: Into<Mechanism>,

Set the socket’s Mechanism. Read more
Source§

impl Eq for Client

Source§

impl Send for Client

Source§

impl StructuralPartialEq for Client

Source§

impl Sync for Client

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.