feat(server): Remove Send + Sync requirement for Body in with_graceful_shutdown
Also expand the single threaded example to use that.
This commit is contained in:
committed by
Sean McArthur
parent
7feab2f3db
commit
1d553e52c6
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
use tokio::sync::oneshot;
|
||||||
|
|
||||||
use hyper::body::{Bytes, HttpBody};
|
use hyper::body::{Bytes, HttpBody};
|
||||||
use hyper::header::{HeaderMap, HeaderValue};
|
use hyper::header::{HeaderMap, HeaderValue};
|
||||||
@@ -81,6 +82,13 @@ async fn run() {
|
|||||||
|
|
||||||
let server = Server::bind(&addr).executor(LocalExec).serve(make_service);
|
let server = Server::bind(&addr).executor(LocalExec).serve(make_service);
|
||||||
|
|
||||||
|
// Just shows that with_graceful_shutdown compiles with !Send,
|
||||||
|
// !Sync HttpBody.
|
||||||
|
let (_tx, rx) = oneshot::channel::<()>();
|
||||||
|
let server = server.with_graceful_shutdown(async move {
|
||||||
|
rx.await.ok();
|
||||||
|
});
|
||||||
|
|
||||||
println!("Listening on http://{}", addr);
|
println!("Listening on http://{}", addr);
|
||||||
|
|
||||||
// The server would block on current thread to await !Send futures.
|
// The server would block on current thread to await !Send futures.
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ where
|
|||||||
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
|
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
|
||||||
S: MakeServiceRef<IO, Body, ResBody = B>,
|
S: MakeServiceRef<IO, Body, ResBody = B>,
|
||||||
S::Error: Into<Box<dyn StdError + Send + Sync>>,
|
S::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||||
B: HttpBody + Send + Sync + 'static,
|
B: HttpBody + 'static,
|
||||||
B::Error: Into<Box<dyn StdError + Send + Sync>>,
|
B::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||||
E: ConnStreamExec<<S::Service as HttpService<Body>>::Future, B>,
|
E: ConnStreamExec<<S::Service as HttpService<Body>>::Future, B>,
|
||||||
E: NewSvcExec<IO, S::Future, S::Service, E, GracefulWatcher>,
|
E: NewSvcExec<IO, S::Future, S::Service, E, GracefulWatcher>,
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ where
|
|||||||
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
|
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
|
||||||
S: MakeServiceRef<IO, Body, ResBody = B>,
|
S: MakeServiceRef<IO, Body, ResBody = B>,
|
||||||
S::Error: Into<Box<dyn StdError + Send + Sync>>,
|
S::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||||
B: HttpBody + Send + Sync + 'static,
|
B: HttpBody + 'static,
|
||||||
B::Error: Into<Box<dyn StdError + Send + Sync>>,
|
B::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||||
F: Future<Output = ()>,
|
F: Future<Output = ()>,
|
||||||
E: ConnStreamExec<<S::Service as HttpService<Body>>::Future, B>,
|
E: ConnStreamExec<<S::Service as HttpService<Body>>::Future, B>,
|
||||||
@@ -103,7 +103,7 @@ where
|
|||||||
I: AsyncRead + AsyncWrite + Unpin + Send + 'static,
|
I: AsyncRead + AsyncWrite + Unpin + Send + 'static,
|
||||||
S: HttpService<Body>,
|
S: HttpService<Body>,
|
||||||
E: ConnStreamExec<S::Future, S::ResBody>,
|
E: ConnStreamExec<S::Future, S::ResBody>,
|
||||||
S::ResBody: Send + Sync + 'static,
|
S::ResBody: 'static,
|
||||||
<S::ResBody as HttpBody>::Error: Into<Box<dyn StdError + Send + Sync>>,
|
<S::ResBody as HttpBody>::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||||
{
|
{
|
||||||
type Future =
|
type Future =
|
||||||
@@ -119,7 +119,7 @@ where
|
|||||||
S: HttpService<Body>,
|
S: HttpService<Body>,
|
||||||
S::Error: Into<Box<dyn StdError + Send + Sync>>,
|
S::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||||
I: AsyncRead + AsyncWrite + Unpin,
|
I: AsyncRead + AsyncWrite + Unpin,
|
||||||
S::ResBody: HttpBody + Send + 'static,
|
S::ResBody: HttpBody + 'static,
|
||||||
<S::ResBody as HttpBody>::Error: Into<Box<dyn StdError + Send + Sync>>,
|
<S::ResBody as HttpBody>::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||||
E: ConnStreamExec<S::Future, S::ResBody>,
|
E: ConnStreamExec<S::Future, S::ResBody>,
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user