[−][src]Struct roa_core::Server
A listening HTTP server that accepts connections in both HTTP1 and HTTP2 by default.
Server
is a Future
mapping a bound listener with a set of service
handlers. It is built using the Builder
, and the future
completes when the server has been shutdown. It should be run by an
Executor
.
Methods
impl<I> Server<I, (), Exec>
[src]
pub fn builder(incoming: I) -> Builder<I, Exec>
[src]
Starts a Builder
with the provided incoming stream.
impl<I, IO, IE, S, E, B> Server<I, S, E> where
B: Payload,
E: H2Exec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, GracefulWatcher>,
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + 'static + Send + Sync>>,
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
S: MakeServiceRef<IO, Body, ResBody = B>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + 'static + Send + Sync>>,
[src]
B: Payload,
E: H2Exec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, GracefulWatcher>,
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + 'static + Send + Sync>>,
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
S: MakeServiceRef<IO, Body, ResBody = B>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + 'static + Send + Sync>>,
pub fn with_graceful_shutdown<F>(self, signal: F) -> Graceful<I, S, F, E> where
F: Future<Output = ()>,
[src]
F: Future<Output = ()>,
Prepares a server to handle graceful shutdown when the provided future completes.
Example
// Make a server from the previous examples... let server = Server::bind(&([127, 0, 0, 1], 3000).into()) .serve(make_service); // Prepare some signal for when the server should start shutting down... let (tx, rx) = tokio::sync::oneshot::channel::<()>(); let graceful = server .with_graceful_shutdown(async { rx.await.ok(); }); // Await the `server` receiving the signal... if let Err(e) = graceful.await { eprintln!("server error: {}", e); } // And later, trigger the signal by calling `tx.send(())`. let _ = tx.send(());
Trait Implementations
impl<I, S> Debug for Server<I, S, Exec> where
I: Debug,
S: Debug,
[src]
I: Debug,
S: Debug,
impl<I, IO, IE, S, B, E> Future for Server<I, S, E> where
B: Payload,
E: H2Exec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, NoopWatcher>,
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + 'static + Send + Sync>>,
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
S: MakeServiceRef<IO, Body, ResBody = B>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + 'static + Send + Sync>>,
[src]
B: Payload,
E: H2Exec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, NoopWatcher>,
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + 'static + Send + Sync>>,
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
S: MakeServiceRef<IO, Body, ResBody = B>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + 'static + Send + Sync>>,
type Output = Result<(), Error>
The type of value produced on completion.
fn poll(
self: Pin<&mut Server<I, S, E>>,
cx: &mut Context
) -> Poll<<Server<I, S, E> as Future>::Output>
[src]
self: Pin<&mut Server<I, S, E>>,
cx: &mut Context
) -> Poll<<Server<I, S, E> as Future>::Output>
impl<'pin, I, S, E> Unpin for Server<I, S, E> where
__Server<'pin, I, S, E>: Unpin,
[src]
__Server<'pin, I, S, E>: Unpin,
Auto Trait Implementations
impl<I, S, E> RefUnwindSafe for Server<I, S, E> where
E: RefUnwindSafe,
I: RefUnwindSafe,
S: RefUnwindSafe,
E: RefUnwindSafe,
I: RefUnwindSafe,
S: RefUnwindSafe,
impl<I, S, E> Send for Server<I, S, E> where
E: Send,
I: Send,
S: Send,
E: Send,
I: Send,
S: Send,
impl<I, S, E> Sync for Server<I, S, E> where
E: Sync,
I: Sync,
S: Sync,
E: Sync,
I: Sync,
S: Sync,
impl<I, S, E> UnwindSafe for Server<I, S, E> where
E: UnwindSafe,
I: UnwindSafe,
S: UnwindSafe,
E: UnwindSafe,
I: UnwindSafe,
S: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T> FutureExt for T where
T: Future + ?Sized,
[src]
T: Future + ?Sized,
fn map<U, F>(self, f: F) -> Map<Self, F> where
F: FnOnce(Self::Output) -> U,
[src]
F: FnOnce(Self::Output) -> U,
fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F> where
F: FnOnce(Self::Output) -> Fut,
Fut: Future,
[src]
F: FnOnce(Self::Output) -> Fut,
Fut: Future,
fn left_future<B>(self) -> Either<Self, B> where
B: Future<Output = Self::Output>,
[src]
B: Future<Output = Self::Output>,
fn right_future<A>(self) -> Either<A, Self> where
A: Future<Output = Self::Output>,
[src]
A: Future<Output = Self::Output>,
fn into_stream(self) -> IntoStream<Self>
[src]
fn flatten(self) -> Flatten<Self> where
Self::Output: Future,
[src]
Self::Output: Future,
fn flatten_stream(self) -> FlattenStream<Self> where
Self::Output: Stream,
[src]
Self::Output: Stream,
fn fuse(self) -> Fuse<Self>
[src]
fn inspect<F>(self, f: F) -> Inspect<Self, F> where
F: FnOnce(&Self::Output),
[src]
F: FnOnce(&Self::Output),
fn catch_unwind(self) -> CatchUnwind<Self> where
Self: UnwindSafe,
[src]
Self: UnwindSafe,
fn shared(self) -> Shared<Self> where
Self::Output: Clone,
[src]
Self::Output: Clone,
fn remote_handle(self) -> (Remote<Self>, RemoteHandle<Self::Output>)
[src]
fn boxed<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + 'a + Send>> where
Self: Send + 'a,
[src]
Self: Send + 'a,
fn boxed_local<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + 'a>> where
Self: 'a,
[src]
Self: 'a,
fn unit_error(self) -> UnitError<Self>
[src]
fn never_error(self) -> NeverError<Self>
[src]
fn poll_unpin(&mut self, cx: &mut Context) -> Poll<Self::Output> where
Self: Unpin,
[src]
Self: Unpin,
fn now_or_never(self) -> Option<Self::Output>
[src]
impl<T> FutureExt for T where
T: Future + ?Sized,
[src]
T: Future + ?Sized,
fn delay(self, dur: Duration) -> DelayFuture<Self>
[src]
fn flatten(self) -> FlattenFuture<Self, <Self::Output as IntoFuture>::Future> where
Self::Output: IntoFuture,
[src]
Self::Output: IntoFuture,
fn race<F>(self, other: F) -> Race<Self, F> where
F: Future<Output = Self::Output>,
Self: Future,
[src]
F: Future<Output = Self::Output>,
Self: Future,
fn try_race<F, T, E>(self, other: F) -> TryRace<Self, F> where
F: Future<Output = Self::Output>,
Self: Future<Output = Result<T, E>>,
[src]
F: Future<Output = Self::Output>,
Self: Future<Output = Result<T, E>>,
fn join<F>(self, other: F) -> Join<Self, F> where
F: Future,
Self: Future,
[src]
F: Future,
Self: Future,
fn try_join<F, A, B, E>(self, other: F) -> TryJoin<Self, F> where
F: Future<Output = Result<B, E>>,
Self: Future<Output = Result<A, E>>,
[src]
F: Future<Output = Result<B, E>>,
Self: Future<Output = Result<A, E>>,
fn timeout(self, dur: Duration) -> TimeoutFuture<Self>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> IntoFuture for T where
T: Future,
[src]
T: Future,
type Output = <T as Future>::Output
The type of value produced on completion.
type Future = T
Which kind of future are we turning this into?
fn into_future(self) -> <T as IntoFuture>::Future
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<F, T, E> TryFuture for F where
F: Future<Output = Result<T, E>> + ?Sized,
[src]
F: Future<Output = Result<T, E>> + ?Sized,
type Ok = T
The type of successful values yielded by this future
type Error = E
The type of failures yielded by this future
fn try_poll(self: Pin<&mut F>, cx: &mut Context) -> Poll<<F as Future>::Output>
[src]
impl<Fut> TryFutureExt for Fut where
Fut: TryFuture + ?Sized,
[src]
Fut: TryFuture + ?Sized,
fn flatten_sink<Item>(self) -> FlattenSink<Self, Self::Ok> where
Self::Ok: Sink<Item>,
<Self::Ok as Sink<Item>>::Error == Self::Error,
[src]
Self::Ok: Sink<Item>,
<Self::Ok as Sink<Item>>::Error == Self::Error,
fn map_ok<T, F>(self, f: F) -> MapOk<Self, F> where
F: FnOnce(Self::Ok) -> T,
[src]
F: FnOnce(Self::Ok) -> T,
fn map_ok_or_else<T, E, F>(self, e: E, f: F) -> MapOkOrElse<Self, F, E> where
E: FnOnce(Self::Error) -> T,
F: FnOnce(Self::Ok) -> T,
[src]
E: FnOnce(Self::Error) -> T,
F: FnOnce(Self::Ok) -> T,
fn map_err<E, F>(self, f: F) -> MapErr<Self, F> where
F: FnOnce(Self::Error) -> E,
[src]
F: FnOnce(Self::Error) -> E,
fn err_into<E>(self) -> ErrInto<Self, E> where
Self::Error: Into<E>,
[src]
Self::Error: Into<E>,
fn and_then<Fut, F>(self, f: F) -> AndThen<Self, Fut, F> where
F: FnOnce(Self::Ok) -> Fut,
Fut: TryFuture<Error = Self::Error>,
[src]
F: FnOnce(Self::Ok) -> Fut,
Fut: TryFuture<Error = Self::Error>,
fn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F> where
F: FnOnce(Self::Error) -> Fut,
Fut: TryFuture<Ok = Self::Ok>,
[src]
F: FnOnce(Self::Error) -> Fut,
Fut: TryFuture<Ok = Self::Ok>,
fn inspect_ok<F>(self, f: F) -> InspectOk<Self, F> where
F: FnOnce(&Self::Ok),
[src]
F: FnOnce(&Self::Ok),
fn inspect_err<F>(self, f: F) -> InspectErr<Self, F> where
F: FnOnce(&Self::Error),
[src]
F: FnOnce(&Self::Error),
fn try_flatten_stream(self) -> TryFlattenStream<Self> where
Self::Ok: TryStream,
<Self::Ok as TryStream>::Error == Self::Error,
[src]
Self::Ok: TryStream,
<Self::Ok as TryStream>::Error == Self::Error,
fn unwrap_or_else<F>(self, f: F) -> UnwrapOrElse<Self, F> where
F: FnOnce(Self::Error) -> Self::Ok,
[src]
F: FnOnce(Self::Error) -> Self::Ok,
fn into_future(self) -> IntoFuture<Self>
[src]
fn try_poll_unpin(
&mut self,
cx: &mut Context
) -> Poll<Result<Self::Ok, Self::Error>> where
Self: Unpin,
[src]
&mut self,
cx: &mut Context
) -> Poll<Result<Self::Ok, Self::Error>> where
Self: Unpin,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,