http.rs |
|
1704 |
make.rs |
|
5498 |
mod.rs |
Asynchronous Services
A [`Service`](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`](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`](crate::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 `Service`s can be put into a
`MakeService`, and then passed to individual `Service`s when `call`
is called. |
2231 |
oneshot.rs |
|
1924 |
util.rs |
|
2036 |