1个不稳定版本
使用旧的Rust 2015
0.1.1 | 2019年4月10日 |
---|
1429 在 HTTP服务器
10KB
142 行
Blink
快速、小巧且可靠的微服务库。
关于
Blink是Hyper的一个小型低级包装器。它的目标是依赖尽可能少,并作为处理传入请求的基本处理器。它不适合用于您的网站,如果需要,请考虑使用像Rocket或Gotham这样的东西。相反,它用于微服务,在路由非常有用,但大型Web框架会消耗大量资源的情况下。
这意味着您仍然可以为微服务编写代码来完成它们所需的工作,而无需担心设置处理传入请求的所有细节或处理低级HTTP内部结构。
构建要求
您只需要Rust编译器的稳定版本。由于使用了?
运算符,仅支持rustc
1.15及以上版本。
如何使用库
将以下内容放入您的项目中的Cargo.toml
[dependencies]
blink = "0.1"
然后,在您的crate根目录中导入crate
#[macro_use] extern crate blink;
use blink::*;
从这里,您可以设置路由以处理传入请求。
示例
以下代码段创建了一个简单的回声服务器
#[macro_use] extern crate blink;
// Imports traits and the reexported hyper and futures crates
use blink::*;
use futures::future::ok;
use hyper::header::ContentLength;
static INDEX: &'static [u8] = b"Try POST /echo\n";
fn main() {
// Set up the routes and run it.
// You can set the port as well with a function call
// before run() to port() by default it runs on 7878
Blink::new().routes(router! {
("/", GetEcho)
("/echo", GetEcho)
("/echo", PostEcho)
}).run().unwrap();
}
routes!(
// Each route handler needs 3 things:
// 1) Takes a request verb needed for routes that use this:
// Post, Put, Patch, Get, or Delete
// 2) A name for the handler type, in this case PostEcho
// 3) A closure. Closures take a hyper::server::Request type and returns a
// futures::future::FutureResult<hyper::server::Response, hyper::Error>;
// These types are automatically imported in the routes macro (except for
// hyper::Error) to reduce what things you need to import
(Post, PostEcho, |req: Request| {
let mut res = Response::new();
if let Some(len) = req.headers().get::<ContentLength>() {
res.headers_mut().set(len.clone());
}
ok(res.with_body(req.body()))
})
(Get, GetEcho, |_| {
ok(Response::new()
.with_header(ContentLength(INDEX.len() as u64))
.with_body(INDEX))
})
);
启动此服务器后,如果运行以下命令,您将看到所有路由都已实现!
% curl localhost:6767
Try POST /echo
% curl localhost:6767/echo
Try POST /echo
% curl -X POST -d 'Hello!' localhost:6767/echo
Hello!
依赖关系
~10MB
~194K SLoC