[][src]Struct libzmq::Radio

pub struct Radio { /* fields omitted */ }

A Radio socket is used by a publisher to distribute data to Dish sockets.

Each message belong to a group specified with set_group. Messages are distributed to all members of a group.

Mute State

When a Radio socket enters the mute state due to having reached the high water mark for a subscriber, then any messages that would be sent to the subscriber in question shall instead be dropped until the mute state ends.

Summary of Characteristics

Characteristic Value
Compatible peer sockets Dish
Direction Unidirectional
Send/receive pattern Send only
Incoming routing strategy N/A
Outgoing routing strategy Fan out
Action in mute state Drop

Example

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

let addr: TcpAddr = "127.0.0.1:*".try_into()?;

let radio = RadioBuilder::new()
    .bind(addr)
    .build()?;

let bound = radio.last_endpoint().unwrap();
let a: &Group = "A".try_into()?;
let b: &Group = "B".try_into()?;

let dish_a = DishBuilder::new()
    .connect(&bound)
    .join(a)
    .build()?;

let dish_b = DishBuilder::new()
    .connect(bound)
    .join(b)
    .build()?;

// Start the feed. It has no conceptual start nor end, thus we
// don't synchronize with the subscribers.
thread::spawn(move || {
    let a: &Group = "A".try_into().unwrap();
    let b: &Group = "B".try_into().unwrap();
    let mut count = 0;
    loop {
        let mut msg = Msg::new();
        // Alternate between the two groups.
        let group = {
            if count % 2 == 0 {
                a
            } else {
                b
            }
        };

        msg.set_group(group);
        radio.send(msg).unwrap();

        thread::sleep(Duration::from_millis(1));
        count += 1;
    }
});

// Each dish will only receive the messages from their respective groups.
let msg = dish_a.recv_msg()?;
assert_eq!(msg.group().unwrap(), a);

let msg = dish_b.recv_msg()?;
assert_eq!(msg.group().unwrap(), b);

Methods

impl Radio[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 Radio socket from a specific context.

Returned Error Variants

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

Returns a reference to the context of the socket.

pub fn no_drop(&self) -> Result<bool, Error>[src]

Returns true if the no_drop option is set.

pub fn set_no_drop(&self, enabled: bool) -> Result<(), Error>[src]

Sets the socket's behaviour to block instead of drop messages when in the mute state.

Default value

false

Trait Implementations

impl SendMsg for Radio[src]

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

Push a message into the outgoing socket queue. Read more

fn try_send<M>(&self, msg: 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 Radio[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 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 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::}; Read more

impl Sync for Radio[src]

impl Send for Radio[src]

impl PartialEq<Radio> for Radio[src]

impl Clone for Radio[src]

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

Performs copy-assignment from source. Read more

impl Eq for Radio[src]

impl Debug for Radio[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]