[−][src]Module libp2p::request_response
Generic request/response protocols.
General Usage
[RequestResponse
] is a NetworkBehaviour
that implements a generic
request/response protocol or protocol family, whereby each request is
sent over a new substream on a connection. RequestResponse
is generic
over the actual messages being sent, which are defined in terms of a
[RequestResponseCodec
]. Creating a request/response protocol thus amounts
to providing an implementation of this trait which can then be
given to [RequestResponse::new
]. Further configuration options are
available via the [RequestResponseConfig
].
Requests are sent using [RequestResponse::send_request
] and the
responses received as [RequestResponseMessage::Response
] via
[RequestResponseEvent::Message
].
Responses are sent using [RequestResponse::send_response
] upon
receiving a [RequestResponseMessage::Request
] via
[RequestResponseEvent::Message
].
Protocol Families
A single [RequestResponse
] instance can be used with an entire
protocol family that share the same request and response types.
For that purpose, [RequestResponseCodec::Protocol
] is typically
instantiated with a sum type.
One-Way Protocols
The implementation supports one-way protocols that do not
have responses. In these cases the [RequestResponseCodec::Response
] can
be defined as ()
and [RequestResponseCodec::read_response
] as well as
[RequestResponseCodec::write_response
] given the obvious implementations.
Note that RequestResponseMessage::Response
will still be emitted,
immediately after the request has been sent, since RequestResponseCodec::read_response
will not actually read anything from the given I/O stream.
[RequestResponse::send_response
] need not be called for one-way protocols,
i.e. the [ResponseChannel
] may just be dropped.
Limited Protocol Support
It is possible to only support inbound or outbound requests for
a particular protocol. This is achieved by instantiating RequestResponse
with protocols using [ProtocolSupport::Inbound
] or
[ProtocolSupport::Outbound
]. Any subset of protocols of a protocol
family can be configured in this way. Such protocols will not be
advertised during inbound respectively outbound protocol negotiation
on the substreams.
Modules
codec | |
handler |
Structs
RequestId | The (local) ID of an outgoing request. |
RequestResponse | A request/response protocol for some message codec. |
RequestResponseConfig | The configuration for a |
ResponseChannel | A channel for sending a response to an inbound request. |
Enums
InboundFailure | Possible failures occurring in the context of receiving an inbound request and sending a response. |
OutboundFailure | Possible failures occurring in the context of sending an outbound request and receiving the response. |
ProtocolSupport | The level of support for a particular protocol. |
RequestResponseEvent | The events emitted by a [ |
RequestResponseMessage | An inbound request or response. |
Traits
ProtocolName | Types serving as protocol names. |
RequestResponseCodec | A |