pub struct Serve<L, M, S, B> { /* private fields */ }Expand description
A server future that serves HTTP connections.
This is the return type of serve. It implements IntoFuture, so
you can directly .await it:
serve(listener, service).await?;Before awaiting, you can configure it:
configure_hyper- Configure Hyper’s connection builderwith_graceful_shutdown- Enable graceful shutdownlocal_addr- Get the bound address
Created by serve.
Implementations§
Source§impl<L, M, S, B> Serve<L, M, S, B>where
L: Listener,
impl<L, M, S, B> Serve<L, M, S, B>where
L: Listener,
Sourcepub fn configure_hyper<F>(self, f: F) -> Selfwhere
F: FnOnce(Builder<TokioExecutor>) -> Builder<TokioExecutor>,
pub fn configure_hyper<F>(self, f: F) -> Selfwhere
F: FnOnce(Builder<TokioExecutor>) -> Builder<TokioExecutor>,
Configure the underlying Hyper connection builder.
This allows you to customize Hyper’s HTTP/1 and HTTP/2 settings, such as timeouts, max concurrent streams, keep-alive behavior, etc.
The configuration is applied once and the configured builder is cloned for each connection, providing optimal performance.
§Example
use std::time::Duration;
serve(listener, service)
.configure_hyper(|builder| {
builder
.http1()
.keep_alive(true)
.http2()
.max_concurrent_streams(200)
})
.await?;§Advanced: Per-Connection Configuration
If you need per-connection customization (e.g., different settings based on the remote address), you can implement your own connection loop. See the module-level documentation for examples.
Sourcepub fn with_graceful_shutdown<F>(
self,
signal: F,
) -> ServeWithGracefulShutdown<L, M, S, F, B>
pub fn with_graceful_shutdown<F>( self, signal: F, ) -> ServeWithGracefulShutdown<L, M, S, F, B>
Enable graceful shutdown for the server.
Sourcepub fn local_addr(&self) -> Result<L::Addr>
pub fn local_addr(&self) -> Result<L::Addr>
Returns the local address this server is bound to.
Trait Implementations§
Source§impl<L, M, S, B> IntoFuture for Serve<L, M, S, B>where
L: Listener,
L::Addr: Debug,
B: HttpBody + Send + 'static,
B::Data: Send,
B::Error: Into<Box<dyn StdError + Send + Sync>>,
S: Service<Request<Incoming>, Response = Response<B>, Error = Infallible> + Clone + Send + 'static,
S::Future: Send,
M: for<'a> Service<IncomingStream<'a, L>, Error = Infallible, Response = S> + Send + 'static,
for<'a> <M as Service<IncomingStream<'a, L>>>::Future: Send,
impl<L, M, S, B> IntoFuture for Serve<L, M, S, B>where
L: Listener,
L::Addr: Debug,
B: HttpBody + Send + 'static,
B::Data: Send,
B::Error: Into<Box<dyn StdError + Send + Sync>>,
S: Service<Request<Incoming>, Response = Response<B>, Error = Infallible> + Clone + Send + 'static,
S::Future: Send,
M: for<'a> Service<IncomingStream<'a, L>, Error = Infallible, Response = S> + Send + 'static,
for<'a> <M as Service<IncomingStream<'a, L>>>::Future: Send,
Source§type IntoFuture = Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
type IntoFuture = Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
Source§fn into_future(self) -> Self::IntoFuture
fn into_future(self) -> Self::IntoFuture
Auto Trait Implementations§
impl<L, M, S, B> Freeze for Serve<L, M, S, B>
impl<L, M, S, B> !RefUnwindSafe for Serve<L, M, S, B>
impl<L, M, S, B> Send for Serve<L, M, S, B>
impl<L, M, S, B> Sync for Serve<L, M, S, B>
impl<L, M, S, B> Unpin for Serve<L, M, S, B>
impl<L, M, S, B> !UnwindSafe for Serve<L, M, S, B>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more