pub struct ProtocolConfig {
pub name: &'static str,
pub max_request_size: u64,
pub max_response_size: u64,
pub request_timeout: Duration,
pub inbound_queue: Option<Sender<IncomingRequest>>,
}
Expand description
Configuration for a single request-response protocol.
Fields§
§name: &'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.
Implementations§
source§impl ProtocolConfig
impl ProtocolConfig
sourcepub fn new(protocol_name: &'static str) -> ProtocolConfig
pub fn new(protocol_name: &'static str) -> ProtocolConfig
Creates request-response protocol config.
Trait Implementations§
source§impl Clone for ProtocolConfig
impl Clone for ProtocolConfig
source§fn clone(&self) -> ProtocolConfig
fn clone(&self) -> ProtocolConfig
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl Freeze for ProtocolConfig
impl !RefUnwindSafe for ProtocolConfig
impl Send for ProtocolConfig
impl Sync for ProtocolConfig
impl Unpin for ProtocolConfig
impl !UnwindSafe for ProtocolConfig
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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