(fix) Update examples and benchmarks to remove rust-http.

This commit is contained in:
Jonathan Reem
2014-12-20 03:07:00 -08:00
parent 06a9ccf978
commit 618f95e10a
6 changed files with 9 additions and 133 deletions

View File

@@ -20,3 +20,6 @@ cookie = "*"
time = "*" time = "*"
mucell = "*" mucell = "*"
[dev-dependencies]
curl = "*"

View File

@@ -59,42 +59,6 @@ fn main() {
} }
``` ```
## Scientific\* Benchmarks
[Client Bench:](./benches/client.rs)
```
running 3 tests
test bench_curl ... bench: 400253 ns/iter (+/- 143539)
test bench_hyper ... bench: 181703 ns/iter (+/- 46529)
test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured
```
[Mock Client Bench:](./benches/client_mock_tcp.rs)
```
running 3 tests
test bench_mock_curl ... bench: 53987 ns/iter (+/- 1735)
test bench_mock_http ... bench: 43569 ns/iter (+/- 1409)
test bench_mock_hyper ... bench: 20996 ns/iter (+/- 1742)
test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured
```
[Server Bench:](./benches/server.rs)
```
running 2 tests
test bench_http ... bench: 296539 ns/iter (+/- 58861)
test bench_hyper ... bench: 233069 ns/iter (+/- 90194)
test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured
```
\* No science was harmed in the making of this benchmark.
## License ## License
[MIT](./LICENSE) [MIT](./LICENSE)

View File

@@ -1,6 +1,5 @@
#![feature(macro_rules)] #![feature(macro_rules)]
extern crate curl; extern crate curl;
extern crate http;
extern crate hyper; extern crate hyper;
extern crate test; extern crate test;
@@ -8,10 +7,8 @@ extern crate test;
use std::fmt::{mod, Show}; use std::fmt::{mod, Show};
use std::io::net::ip::Ipv4Addr; use std::io::net::ip::Ipv4Addr;
use hyper::server::{Request, Response, Server}; use hyper::server::{Request, Response, Server};
use hyper::method::Method::Get;
use hyper::header::Headers; use hyper::header::Headers;
use hyper::Client; use hyper::Client;
use hyper::client::RequestBuilder;
fn listen() -> hyper::server::Listening { fn listen() -> hyper::server::Listening {
let server = Server::http(Ipv4Addr(127, 0, 0, 1), 0); let server = Server::http(Ipv4Addr(127, 0, 0, 1), 0);
@@ -24,16 +21,16 @@ macro_rules! try_return(
Ok(v) => v, Ok(v) => v,
Err(..) => return Err(..) => return
} }
}}) }}
);
fn handle(_r: Request, res: Response) { fn handle(_r: Request, res: Response) {
static BODY: &'static [u8] = b"Benchmarking hyper vs others!"; static BODY: &'static [u8] = b"Benchmarking hyper vs others!";
let mut res = try_return!(res.start()); let mut res = try_return!(res.start());
try_return!(res.write(BODY)) try_return!(res.write(BODY));
try_return!(res.end()); try_return!(res.end());
} }
#[bench] #[bench]
fn bench_curl(b: &mut test::Bencher) { fn bench_curl(b: &mut test::Bencher) {
let mut listening = listen(); let mut listening = listen();
@@ -81,26 +78,3 @@ fn bench_hyper(b: &mut test::Bencher) {
listening.close().unwrap() listening.close().unwrap()
} }
/*
doesn't handle keep-alive properly...
#[bench]
fn bench_http(b: &mut test::Bencher) {
let mut listening = listen();
let s = format!("http://{}/", listening.socket);
let url = s.as_slice();
b.iter(|| {
let mut req: http::client::RequestWriter = http::client::RequestWriter::new(
http::method::Get,
hyper::Url::parse(url).unwrap()
).unwrap();
req.headers.extensions.insert("x-foo".to_string(), "Bar".to_string());
// cant unwrap because Err contains RequestWriter, which does not implement Show
let mut res = match req.read_response() {
Ok(res) => res,
Err((_, ioe)) => panic!("http response failed = {}", ioe)
};
res.read_to_string().unwrap();
});
listening.close().unwrap()
}
*/

View File

@@ -1,6 +1,5 @@
#![feature(default_type_params)] #![feature(default_type_params)]
extern crate curl; extern crate curl;
extern crate http;
extern crate hyper; extern crate hyper;
extern crate test; extern crate test;
@@ -8,12 +7,10 @@ extern crate test;
use std::fmt::{mod, Show}; use std::fmt::{mod, Show};
use std::str::from_str; use std::str::from_str;
use std::io::{IoResult, MemReader}; use std::io::{IoResult, MemReader};
use std::io::net::ip::{SocketAddr, ToSocketAddr}; use std::io::net::ip::SocketAddr;
use std::os; use std::os;
use std::path::BytesContainer; use std::path::BytesContainer;
use http::connecter::Connecter;
use hyper::net; use hyper::net;
static README: &'static [u8] = include_bin!("../README.md"); static README: &'static [u8] = include_bin!("../README.md");
@@ -117,27 +114,3 @@ fn bench_mock_hyper(b: &mut test::Bencher) {
}); });
} }
impl Connecter for MockStream {
fn connect(_addr: SocketAddr, _host: &str, _use_ssl: bool) -> IoResult<MockStream> {
Ok(MockStream::new())
}
}
#[bench]
fn bench_mock_http(b: &mut test::Bencher) {
let url = "http://127.0.0.1:1337/";
b.iter(|| {
let mut req: http::client::RequestWriter<MockStream> = http::client::RequestWriter::new(
http::method::Get,
hyper::Url::parse(url).unwrap()
).unwrap();
req.headers.extensions.insert("x-foo".to_string(), "Bar".to_string());
// cant unwrap because Err contains RequestWriter, which does not implement Show
let mut res = match req.read_response() {
Ok(res) => res,
Err(..) => panic!("http response failed")
};
res.read_to_string().unwrap();
});
}

View File

@@ -1,14 +1,9 @@
// You have to ctrl-C after running this benchmark, since there is no way to kill
// a rust-http server.
extern crate http;
extern crate hyper; extern crate hyper;
extern crate test; extern crate test;
use test::Bencher; use test::Bencher;
use std::io::net::ip::{SocketAddr, Ipv4Addr}; use std::io::net::ip::Ipv4Addr;
use http::server::Server;
use hyper::method::Method::Get; use hyper::method::Method::Get;
use hyper::server::{Request, Response}; use hyper::server::{Request, Response};
@@ -35,36 +30,3 @@ fn bench_hyper(b: &mut Bencher) {
listener.close().unwrap(); listener.close().unwrap();
} }
static mut created_http: bool = false;
#[deriving(Clone)]
struct HttpServer;
impl Server for HttpServer {
fn get_config(&self) -> http::server::Config {
http::server::Config {
bind_address: SocketAddr {
ip: Ipv4Addr(127, 0, 0, 1),
port: 4000
}
}
}
fn handle_request(&self, _: http::server::Request, res: &mut http::server::ResponseWriter) {
res.write(PHRASE).unwrap();
}
}
#[bench]
fn bench_http(b: &mut Bencher) {
if unsafe { !created_http } {
spawn(proc() { HttpServer.serve_forever() });
unsafe { created_http = true }
// Mega hack because there is no way to wait for serve_forever to start:
std::io::timer::sleep(std::time::duration::Duration::seconds(1));
}
let url = hyper::Url::parse("http://localhost:4000").unwrap();
b.iter(|| request(url.clone()));
}

View File

@@ -18,7 +18,7 @@ macro_rules! try_return(
Err(e) => { error!("Error: {}", e); return; } Err(e) => { error!("Error: {}", e); return; }
} }
}} }}
) );
fn echo(mut req: Request, mut res: Response) { fn echo(mut req: Request, mut res: Response) {
match req.uri { match req.uri {