Update to hyper 0.13
This commit is contained in:
committed by
Sean McArthur
parent
db2de90e42
commit
0f32c4a01a
@@ -8,6 +8,7 @@ use std::time::Duration;
|
||||
use tokio::sync::oneshot;
|
||||
|
||||
pub use http::Response;
|
||||
use tokio::runtime;
|
||||
|
||||
pub struct Server {
|
||||
addr: net::SocketAddr,
|
||||
@@ -40,41 +41,52 @@ where
|
||||
F: Fn(http::Request<hyper::Body>) -> Fut + Clone + Send + 'static,
|
||||
Fut: Future<Output = http::Response<hyper::Body>> + Send + 'static,
|
||||
{
|
||||
let srv = hyper::Server::bind(&([127, 0, 0, 1], 0).into()).serve(
|
||||
hyper::service::make_service_fn(move |_| {
|
||||
let func = func.clone();
|
||||
async move {
|
||||
Ok::<_, Infallible>(hyper::service::service_fn(move |req| {
|
||||
let fut = func(req);
|
||||
async move { Ok::<_, Infallible>(fut.await) }
|
||||
}))
|
||||
}
|
||||
}),
|
||||
);
|
||||
//Spawn new runtime in thread to prevent reactor execution context conflict
|
||||
thread::spawn(move || {
|
||||
let mut rt = runtime::Builder::new()
|
||||
.basic_scheduler()
|
||||
.enable_all()
|
||||
.build()
|
||||
.expect("new rt");
|
||||
let srv = rt.block_on(async move {
|
||||
hyper::Server::bind(&([127, 0, 0, 1], 0).into()).serve(hyper::service::make_service_fn(
|
||||
move |_| {
|
||||
let func = func.clone();
|
||||
async move {
|
||||
Ok::<_, Infallible>(hyper::service::service_fn(move |req| {
|
||||
let fut = func(req);
|
||||
async move { Ok::<_, Infallible>(fut.await) }
|
||||
}))
|
||||
}
|
||||
},
|
||||
))
|
||||
});
|
||||
|
||||
let addr = srv.local_addr();
|
||||
let (shutdown_tx, shutdown_rx) = oneshot::channel();
|
||||
let srv = srv.with_graceful_shutdown(async move {
|
||||
let _ = shutdown_rx.await;
|
||||
});
|
||||
let addr = srv.local_addr();
|
||||
let (shutdown_tx, shutdown_rx) = oneshot::channel();
|
||||
let srv = srv.with_graceful_shutdown(async move {
|
||||
let _ = shutdown_rx.await;
|
||||
});
|
||||
|
||||
let (panic_tx, panic_rx) = std_mpsc::channel();
|
||||
let tname = format!(
|
||||
"test({})-support-server",
|
||||
thread::current().name().unwrap_or("<unknown>")
|
||||
);
|
||||
thread::Builder::new()
|
||||
.name(tname)
|
||||
.spawn(move || {
|
||||
let mut rt = tokio::runtime::current_thread::Runtime::new().expect("rt new");
|
||||
rt.block_on(srv).unwrap();
|
||||
let _ = panic_tx.send(());
|
||||
})
|
||||
.expect("thread spawn");
|
||||
let (panic_tx, panic_rx) = std_mpsc::channel();
|
||||
let tname = format!(
|
||||
"test({})-support-server",
|
||||
thread::current().name().unwrap_or("<unknown>")
|
||||
);
|
||||
thread::Builder::new()
|
||||
.name(tname)
|
||||
.spawn(move || {
|
||||
rt.block_on(srv).unwrap();
|
||||
let _ = panic_tx.send(());
|
||||
})
|
||||
.expect("thread spawn");
|
||||
|
||||
Server {
|
||||
addr,
|
||||
panic_rx,
|
||||
shutdown_tx: Some(shutdown_tx),
|
||||
}
|
||||
Server {
|
||||
addr,
|
||||
panic_rx,
|
||||
shutdown_tx: Some(shutdown_tx),
|
||||
}
|
||||
})
|
||||
.join()
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user