项目作者: sile

项目描述 :
A tiny HTTP/1.1 server framework for Rust
高级语言: Rust
项目地址: git://github.com/sile/fibers_http_server.git
创建时间: 2018-03-14T07:00:17Z
项目社区:https://github.com/sile/fibers_http_server

开源协议:MIT License

下载


fibers_http_server

fibers_http_server
Documentation
Build Status
Code Coverage
License: MIT

A tiny HTTP/1.1 server framework for Rust.

Documentation

Examples

  1. use std::io::{Read, Write};
  2. use std::net::TcpStream;
  3. use std::thread;
  4. use std::time::Duration;
  5. use bytecodec::bytes::Utf8Encoder;
  6. use bytecodec::value::NullDecoder;
  7. use fibers::{Executor, Spawn, InPlaceExecutor};
  8. use fibers_http_server::{HandleRequest, Reply, Req, Res, ServerBuilder, Status};
  9. use futures::future::{ok, Future};
  10. use httpcodec::{BodyDecoder, BodyEncoder};
  11. // Request handler
  12. struct Hello;
  13. impl HandleRequest for Hello {
  14. const METHOD: &'static str = "GET";
  15. const PATH: &'static str = "/hello";
  16. type ReqBody = ();
  17. type ResBody = String;
  18. type Decoder = BodyDecoder<NullDecoder>;
  19. type Encoder = BodyEncoder<Utf8Encoder>;
  20. type Reply = Reply<Self::ResBody>;
  21. fn handle_request(&self, _req: Req<Self::ReqBody>) -> Self::Reply {
  22. Box::new(ok(Res::new(Status::Ok, "hello".to_owned())))
  23. }
  24. }
  25. let addr = "127.0.0.1:14758".parse().unwrap();
  26. // HTTP server
  27. thread::spawn(move || {
  28. let executor = InPlaceExecutor::new().unwrap();
  29. let mut builder = ServerBuilder::new(addr);
  30. builder.add_handler(Hello).unwrap();
  31. let server = builder.finish(executor.handle());
  32. executor.spawn(server.map_err(|e| panic!("{}", e)));
  33. executor.run().unwrap()
  34. });
  35. thread::sleep(Duration::from_millis(100));
  36. // HTTP client
  37. let mut client = TcpStream::connect(addr).unwrap();
  38. client
  39. .write_all(b"GET /hello HTTP/1.1\r\nContent-Length: 0\r\n\r\n")
  40. .unwrap();
  41. thread::sleep(Duration::from_millis(100));
  42. let mut buf = [0; 1024];
  43. let size = client.read(&mut buf).unwrap();
  44. assert_eq!(
  45. &buf[..size],
  46. b"HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\nhello".as_ref()
  47. );