[][src]Crate 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.

Re-exports

pub use codec::RequestResponseCodec;
pub use throttled::Throttled;

Modules

codec
handler
throttled

Limit the number of requests peers can send to each other.

Structs

RequestId

The ID of an inbound or outbound 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.