Expand description

Asynchronous Services

A Service is a trait representing an asynchronous function of a request to a response. It’s similar to async fn(Request) -> Result<Response, Error>.

The argument and return value isn’t strictly required to be for HTTP. Therefore, hyper uses several “trait aliases” to reduce clutter around bounds. These are:

  • HttpService: This is blanketly implemented for all types that implement Service<http::Request<B1>, Response = http::Response<B2>>.
  • MakeService: When a Service returns a new Service as its “response”, we consider it a MakeService. Again, blanketly implemented in those cases.
  • MakeConnection: A Service that returns a “connection”, a type that implements AsyncRead and AsyncWrite.

HttpService

In hyper, especially in the server setting, a Service is usually bound to a single connection. It defines how to respond to all requests that connection will receive.

The helper service_fn should be sufficient for most cases, but if you need to implement Service for a type manually, you can follow the example in service_struct_impl.rs.

MakeService

Since a Service is bound to a single connection, a Server needs a way to make them as it accepts connections. This is what a MakeService does.

Resources that need to be shared by all Services can be put into a MakeService, and then passed to individual Services when call is called.

Traits

An asynchronous function from a Request to a Response.

Functions

Create a MakeService from a function.
Create a Service from a function.