[][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 RequestResponse protocol.

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 [RequestResponse] protocol.

RequestResponseMessage

An inbound request or response.

Traits

ProtocolName

Types serving as protocol names.

RequestResponseCodec

A RequestResponseCodec defines the request and response types for a RequestResponse protocol or protocol family and how they are encoded / decoded on an I/O stream.