[][src]Struct libzmq::Client

pub struct Client { /* fields omitted */ }

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

Characteristic Value
Compatible peer sockets Server
Direction Bidirectional
Send/receive pattern Unrestricted
Outgoing routing strategy Round-robin
Incoming routing strategy Fair-queued
Action in mute state Block

Example

use libzmq::{prelude::*, *};
use std::convert::TryInto;

// 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.
let mut reply: Msg = "it takes 224 bits to store a i32 in java".into();
reply.set_routing_id(id);
server.send(reply)?;

// We can reply twice if we want.
let mut reply: Msg = "also don't talk to me".into();
reply.set_routing_id(id);
server.send(reply)?;

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

Methods

impl Client[src]

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

pub fn with_ctx<C>(ctx: C) -> Result<Self, Error> where
    C: Into<Ctx>, 
[src]

Create a Client socket from a specific context.

Returned Error Variants

pub fn ctx(&self) -> &Ctx[src]

Returns a reference to the context of the socket.

Trait Implementations

impl RecvMsg for Client[src]

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

Retreive a message from the inbound socket queue. Read more

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

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

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

A convenience function that allocates a [Msg] with the same properties as [recv]. Read more

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

A convenience function that allocates a [Msg] with the same properties as [try_recv]. Read more

fn recv_high_water_mark(&self) -> Result<Option<i32>, Error>[src]

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

fn set_recv_high_water_mark(&self, maybe: Option<i32>) -> Result<(), Error>[src]

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

fn recv_timeout(&self) -> Result<Option<Duration>, Error>[src]

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

fn set_recv_timeout(&self, maybe: Option<Duration>) -> Result<(), Error>[src]

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

impl SendMsg for Client[src]

fn send<M>(&self, sendable: M) -> Result<(), Error<Msg>> where
    M: Into<Msg>, 
[src]

Push a message into the outgoing socket queue. Read more

fn try_send<M>(&self, sendable: M) -> Result<(), Error<Msg>> where
    M: Into<Msg>, 
[src]

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

fn send_high_water_mark(&self) -> Result<Option<i32>, Error>[src]

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

fn set_send_high_water_mark(&self, maybe: Option<i32>) -> Result<(), Error>[src]

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

fn send_timeout(&self) -> Result<Option<Duration>, Error>[src]

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

fn set_send_timeout(&self, maybe: Option<Duration>) -> Result<(), Error>[src]

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

impl Socket for Client[src]

fn connect<I, E>(&self, endpoints: I) -> Result<(), Error<usize>> where
    I: IntoIterator<Item = E>,
    E: Into<Endpoint>, 
[src]

Schedules a connection to one or more [Endpoints] and then accepts incoming connections. Read more

fn connected(&self) -> Vec<Endpoint>[src]

Returns a snapshot of the list of connected Endpoint. Read more

fn disconnect<I, E>(&self, endpoints: I) -> Result<(), Error<usize>> where
    I: IntoIterator<Item = E>,
    E: Into<Endpoint>, 
[src]

Disconnect the socket from one or more [Endpoints]. Read more

fn bind<I, E>(&self, endpoints: I) -> Result<(), Error<usize>> where
    I: IntoIterator<Item = E>,
    E: Into<Endpoint>, 
[src]

Schedules a bind to one or more [Endpoints] and then accepts incoming connections. Read more

fn bound(&self) -> Vec<Endpoint>[src]

Returns a snapshot of the list of bound Endpoint. Read more

fn unbind<I, E>(&self, endpoints: I) -> Result<(), Error<usize>> where
    I: IntoIterator<Item = E>,
    E: Into<Endpoint>, 
[src]

Unbinds the socket from one or more [Endpoints]. Read more

fn last_endpoint(&self) -> Result<Option<Endpoint>, Error>[src]

Retrieve the last endpoint connected or bound to. Read more

fn backlog(&self) -> Result<i32, Error>[src]

Retrieve the maximum length of the queue of outstanding peer connections. Read more

fn set_backlog(&self, value: i32) -> Result<(), Error>[src]

Set the maximum length of the queue of outstanding peer connections for the specified socket; this only applies to connection-oriented transports. Read more

fn heartbeat_interval(&self) -> Result<Duration, Error>[src]

The interval between sending ZMTP heartbeats.

fn set_heartbeat_interval(&self, duration: Duration) -> Result<(), Error>[src]

Sets the interval between sending ZMTP PINGs (aka. heartbeats). Read more

fn heartbeat_timeout(&self) -> Result<Duration, Error>[src]

How long to wait before timing-out a connection after sending a PING ZMTP command and not receiving any traffic. Read more

fn set_heartbeat_timeout(&self, duration: Duration) -> Result<(), Error>[src]

How long to wait before timing-out a connection after sending a PING ZMTP command and not receiving any traffic. Read more

fn heartbeat_ttl(&self) -> Result<Duration, Error>[src]

The timeout on the remote peer for ZMTP heartbeats. If this option and heartbeat_interval is not None the remote side shall time out the connection if it does not receive any more traffic within the TTL period. Read more

fn set_heartbeat_ttl(&self, duration: Duration) -> Result<(), Error>[src]

Set timeout on the remote peer for ZMTP heartbeats. If this option and heartbeat_interval is not None the remote side shall time out the connection if it does not receive any more traffic within the TTL period. Read more

fn linger(&self) -> Result<Option<Duration>, Error>[src]

Returns the linger period for the socket shutdown.

fn set_linger(&self, maybe: Option<Duration>) -> Result<(), Error>[src]

Sets the linger period for the socket shutdown. Read more

fn mechanism(&self) -> Mechanism[src]

Returns the socket's [Mechanism]. Read more

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

Set the socket's [Mechanism]. # Example ``` # use failure::Error; # # fn main() -> Result<(), Error> { use libzmq::{prelude::*, Client, auth::{PlainClientCreds, Mechanism}}; Read more

impl Sync for Client[src]

impl Send for Client[src]

impl PartialEq<Client> for Client[src]

impl Clone for Client[src]

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Eq for Client[src]

impl Debug for Client[src]

Blanket Implementations

impl<T> From<T> for T[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]