perf(http): introduce MemBuf, a shared read buffer
This commit is contained in:
		| @@ -2,6 +2,7 @@ | ||||
| extern crate hyper; | ||||
| extern crate futures; | ||||
| extern crate spmc; | ||||
| extern crate pretty_env_logger; | ||||
|  | ||||
| use futures::Future; | ||||
| use futures::stream::Stream; | ||||
| @@ -9,6 +10,7 @@ use futures::stream::Stream; | ||||
| use std::net::{TcpStream, SocketAddr}; | ||||
| use std::io::{Read, Write}; | ||||
| use std::sync::mpsc; | ||||
| use std::thread; | ||||
| use std::time::Duration; | ||||
|  | ||||
| use hyper::server::{Server, Request, Response, Service, NewService}; | ||||
| @@ -25,12 +27,6 @@ impl Serve { | ||||
|         self.listening.as_ref().unwrap().addr() | ||||
|     } | ||||
|  | ||||
|     /* | ||||
|     fn head(&self) -> Request { | ||||
|         unimplemented!() | ||||
|     } | ||||
|     */ | ||||
|  | ||||
|     fn body(&self) -> Vec<u8> { | ||||
|         let mut buf = vec![]; | ||||
|         while let Ok(Msg::Chunk(msg)) = self.msg_rx.try_recv() { | ||||
| @@ -152,7 +148,7 @@ fn serve() -> Serve { | ||||
| } | ||||
|  | ||||
| fn serve_with_timeout(dur: Option<Duration>) -> Serve { | ||||
|     use std::thread; | ||||
|     let _ = pretty_env_logger::init(); | ||||
|  | ||||
|     let (thread_tx, thread_rx) = mpsc::channel(); | ||||
|     let (spawn_tx, spawn_rx) = mpsc::channel(); | ||||
| @@ -195,7 +191,7 @@ fn server_get_should_ignore_body() { | ||||
|     req.write_all(b"\ | ||||
|         GET / HTTP/1.1\r\n\ | ||||
|         Host: example.domain\r\n\ | ||||
|         Connection: close\r\n | ||||
|         Connection: close\r\n\ | ||||
|         \r\n\ | ||||
|         I shouldn't be read.\r\n\ | ||||
|     ").unwrap(); | ||||
| @@ -223,7 +219,6 @@ fn server_get_with_body() { | ||||
|  | ||||
| #[test] | ||||
| fn server_get_fixed_response() { | ||||
|  | ||||
|     let foo_bar = b"foo bar baz"; | ||||
|     let server = serve(); | ||||
|     server.reply() | ||||
| @@ -256,7 +251,7 @@ fn server_get_chunked_response() { | ||||
|     req.write_all(b"\ | ||||
|         GET / HTTP/1.1\r\n\ | ||||
|         Host: example.domain\r\n\ | ||||
|         Connection: close\r\n | ||||
|         Connection: close\r\n\ | ||||
|         \r\n\ | ||||
|     ").unwrap(); | ||||
|     let mut body = String::new(); | ||||
| @@ -358,8 +353,8 @@ fn server_empty_response_chunked() { | ||||
|     req.write_all(b"\ | ||||
|         GET / HTTP/1.1\r\n\ | ||||
|         Host: example.domain\r\n\ | ||||
|         Content-Length: 0\r\n | ||||
|         Connection: close\r\n | ||||
|         Content-Length: 0\r\n\ | ||||
|         Connection: close\r\n\ | ||||
|         \r\n\ | ||||
|     ").unwrap(); | ||||
|  | ||||
| @@ -462,28 +457,3 @@ fn server_keep_alive() { | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* | ||||
| #[test] | ||||
| fn server_get_with_body_three_listeners() { | ||||
|     let server = serve_n(3); | ||||
|     let addrs = server.addrs(); | ||||
|     assert_eq!(addrs.len(), 3); | ||||
|  | ||||
|     for (i, addr) in addrs.iter().enumerate() { | ||||
|         let mut req = TcpStream::connect(addr).unwrap(); | ||||
|         write!(req, "\ | ||||
|             GET / HTTP/1.1\r\n\ | ||||
|             Host: example.domain\r\n\ | ||||
|             Content-Length: 17\r\n\ | ||||
|             \r\n\ | ||||
|             I'm sending to {}.\r\n\ | ||||
|         ", i).unwrap(); | ||||
|         req.read(&mut [0; 256]).unwrap(); | ||||
|  | ||||
|         // note: doesnt include trailing \r\n, cause Content-Length wasn't 19 | ||||
|         let comparison = format!("I'm sending to {}.", i).into_bytes(); | ||||
|         assert_eq!(server.body(), comparison); | ||||
|     } | ||||
| } | ||||
| */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user