feat(rt): make tokio runtime optional

A Cargo feature `runtime` is added, which is enabled by default, that
includes the following:

- The `client::HttpConnector`, which uses `tokio::net::TcpStream`.
- The `server::AddrStream`, which uses `tokio::net::TcpListener`.
- The `hyper::rt` module, which includes useful utilities to work with
  the runtime without needing to import `futures` or `tokio` explicity.

Disabling the feature removes many of these niceties, but allows people
to use hyper in environments that have an alternative runtime, without
needing to download an unused one.
This commit is contained in:
Sean McArthur
2018-04-23 16:56:26 -07:00
committed by GitHub
parent 62a5c1188a
commit d127201ef2
21 changed files with 541 additions and 410 deletions

View File

@@ -1,17 +1,12 @@
//#![deny(warnings)]
extern crate futures;
#![deny(warnings)]
extern crate hyper;
extern crate tokio;
extern crate pretty_env_logger;
use std::env;
use std::io::{self, Write};
use futures::{Future, Stream};
use futures::future::lazy;
use hyper::{Body, Client, Request};
use hyper::rt::{self, Future, Stream};
fn main() {
pretty_env_logger::init();
@@ -30,7 +25,7 @@ fn main() {
return;
}
tokio::run(lazy(move || {
rt::run(rt::lazy(move || {
let client = Client::new();
let mut req = Request::new(Body::empty());

View File

@@ -1,13 +1,10 @@
#![deny(warnings)]
extern crate hyper;
extern crate futures;
extern crate pretty_env_logger;
extern crate tokio;
use futures::Future;
use hyper::{Body, Response, Server};
use hyper::service::service_fn_ok;
use hyper::rt::{self, Future};
static PHRASE: &'static [u8] = b"Hello World!";
@@ -33,5 +30,5 @@ fn main() {
println!("Listening on http://{}", addr);
tokio::run(server);
rt::run(server);
}

View File

@@ -1,14 +1,10 @@
#![deny(warnings)]
extern crate hyper;
extern crate futures;
extern crate pretty_env_logger;
extern crate tokio;
use futures::{Future};
use futures::future::{lazy};
use hyper::{Body, Response, Server};
use hyper::service::service_fn_ok;
use hyper::rt::{self, Future};
static INDEX1: &'static [u8] = b"The 1st service!";
static INDEX2: &'static [u8] = b"The 2nd service!";
@@ -19,7 +15,7 @@ fn main() {
let addr1 = ([127, 0, 0, 1], 1337).into();
let addr2 = ([127, 0, 0, 1], 1338).into();
tokio::run(lazy(move || {
rt::run(rt::lazy(move || {
let srv1 = Server::bind(&addr1)
.serve(|| service_fn_ok(|_| Response::new(Body::from(INDEX1))))
.map_err(|e| eprintln!("server 1 error: {}", e));
@@ -30,8 +26,8 @@ fn main() {
println!("Listening on http://{} and http://{}", addr1, addr2);
tokio::spawn(srv1);
tokio::spawn(srv2);
rt::spawn(srv1);
rt::spawn(srv2);
Ok(())
}));

View File

@@ -2,7 +2,6 @@
extern crate futures;
extern crate hyper;
extern crate pretty_env_logger;
extern crate tokio;
extern crate url;
use futures::{future, Future, Stream};
@@ -93,5 +92,5 @@ fn main() {
.serve(|| service_fn(param_example))
.map_err(|e| eprintln!("server error: {}", e));
tokio::run(server);
hyper::rt::run(server);
}

View File

@@ -2,7 +2,6 @@
extern crate futures;
extern crate hyper;
extern crate pretty_env_logger;
extern crate tokio;
use futures::{future, Future};
use futures::sync::oneshot;
@@ -29,7 +28,7 @@ fn main() {
println!("Listening on http://{}", addr);
tokio::run(server);
hyper::rt::run(server);
}
type ResponseFuture = Box<Future<Item=Response<Body>, Error=io::Error> + Send>;

View File

@@ -1,13 +1,10 @@
#![deny(warnings)]
extern crate futures;
extern crate hyper;
extern crate pretty_env_logger;
extern crate tokio;
use futures::Future;
use hyper::{Body, Method, Request, Response, Server, StatusCode};
use hyper::service::service_fn_ok;
use hyper::rt::Future;
static INDEX: &'static [u8] = b"Try POST /echo";
@@ -40,5 +37,5 @@ fn main() {
println!("Listening on http://{}", addr);
tokio::run(server);
hyper::rt::run(server);
}

View File

@@ -2,7 +2,6 @@
extern crate futures;
extern crate hyper;
extern crate pretty_env_logger;
extern crate tokio;
use futures::{future, Future, Stream};
@@ -68,7 +67,7 @@ fn main() {
let addr = "127.0.0.1:1337".parse().unwrap();
tokio::run(future::lazy(move || {
hyper::rt::run(future::lazy(move || {
// Share a `Client` with all `Service`s
let client = Client::new();