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.


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.


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.


http 🔒
make 🔒
oneshot 🔒
util 🔒


An asynchronous function from a Request to a Response.


Create a MakeService from a function.

Create a Service from a function.