Struct sc_network::config::RequestResponseConfig[][src]

pub struct RequestResponseConfig {
    pub name: Cow<'static, str>,
    pub max_request_size: u64,
    pub max_response_size: u64,
    pub request_timeout: Duration,
    pub inbound_queue: Option<Sender<IncomingRequest>>,
}

Configuration for a single request-response protocol.

Fields

name: Cow<'static, str>

Name of the protocol on the wire. Should be something like /foo/bar.

max_request_size: u64

Maximum allowed size, in bytes, of a request.

Any request larger than this value will be declined as a way to avoid allocating too much memory for it.

max_response_size: u64

Maximum allowed size, in bytes, of a response.

Any response larger than this value will be declined as a way to avoid allocating too much memory for it.

request_timeout: Duration

Duration after which emitted requests are considered timed out.

If you expect the response to come back quickly, you should set this to a smaller duration.

inbound_queue: Option<Sender<IncomingRequest>>

Channel on which the networking service will send incoming requests.

Every time a peer sends a request to the local node using this protocol, the networking service will push an element on this channel. The receiving side of this channel then has to pull this element, process the request, and send back the response to send back to the peer.

The size of the channel has to be carefully chosen. If the channel is full, the networking service will discard the incoming request send back an error to the peer. Consequently, the channel being full is an indicator that the node is overloaded.

You can typically set the size of the channel to T / d, where T is the request_timeout and d is the expected average duration of CPU and I/O it takes to build a response.

Can be None if the local node does not support answering incoming requests. If this is None, then the local node will not advertise support for this protocol towards other peers. If this is Some but the channel is closed, then the local node will advertise support for this protocol, but any incoming request will lead to an error being sent back.

Trait Implementations

impl Clone for ProtocolConfig[src]

impl Debug for ProtocolConfig[src]

Auto Trait Implementations

impl !RefUnwindSafe for ProtocolConfig

impl Send for ProtocolConfig

impl Sync for ProtocolConfig

impl Unpin for ProtocolConfig

impl !UnwindSafe for ProtocolConfig

Blanket Implementations

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

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

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

impl<T> CheckedConversion for T[src]

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

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

impl<T> Instrument for T[src]

impl<T> Instrument for T[src]

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

impl<T, Outer> IsWrappedBy<Outer> for T where
    T: From<Outer>,
    Outer: AsRef<T> + AsMut<T> + From<T>, 
[src]

pub fn from_ref(outer: &Outer) -> &T[src]

Get a reference to the inner from the outer.

pub fn from_mut(outer: &mut Outer) -> &mut T[src]

Get a mutable reference to the inner from the outer.

impl<T> MaybeDebug for T where
    T: Debug
[src]

impl<T> MaybeDebug for T where
    T: Debug
[src]

impl<T> Pointable for T[src]

type Init = T

The type for initializers.

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

type Output = T

Should always be Self

impl<T> SaturatedConversion for T[src]

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

type Owned = T

The resulting type after obtaining ownership.

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<S, T> UncheckedInto<T> for S where
    T: UncheckedFrom<S>, 
[src]

impl<T, S> UniqueSaturatedInto<T> for S where
    T: Bounded,
    S: TryInto<T>, 
[src]

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 
[src]