42个版本
0.3.17 | 2024年5月30日 |
---|---|
0.3.15 | 2024年3月22日 |
0.3.9 | 2023年12月24日 |
0.3.6 | 2023年11月23日 |
0.1.8 | 2021年7月26日 |
#805 在 HTTP服务器
每月下载量3,417
用于 50 个crate(直接使用11个)
255KB
5K SLoC
欢迎来到Trillium!
📖 指南 📖
该指南提供了架构概述以及连接Trillium crate的概览。
📑 Rustdocs 📑
Rustdocs代表了学习Trillium的各个crate及其特定接口的最好方式。
法律
许可协议为以下之一
- Apache许可证第2版(《LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT 或 http://opensource.org/licenses/MIT》)
任选其一。
除非您明确表示,否则根据Apache-2.0许可证定义,您提交的任何有意包含在作品中的贡献,将根据上述方式双重许可,而不附加任何额外条款或条件。
lib.rs
:
本crate为Trillium提供http 1.x实现。
稳定性
由于此crate主要供Trillium crate内部使用,API可能不如Trillium中高级抽象稳定。
示例
这是一个复杂的示例,展示了trillium_http的一些功能。请注意,Trillium本身在trillium_http之上提供了更易于使用的接口,代价极小。
use async_net::{TcpListener, TcpStream};
use futures_lite::StreamExt;
use stopper::Stopper;
use trillium_http::{Conn, Result};
let stopper = Stopper::new();
let listener = TcpListener::bind(("localhost", 0)).await?;
let port = listener.local_addr()?.port();
let server_stopper = stopper.clone();
let server_handle = smol::spawn(async move {
let mut incoming = server_stopper.stop_stream(listener.incoming());
while let Some(Ok(stream)) = incoming.next().await {
let stopper = server_stopper.clone();
smol::spawn(Conn::map(stream, stopper, |mut conn: Conn<TcpStream>| async move {
conn.set_response_body("hello world");
conn.set_status(200);
conn
})).detach()
}
Result::Ok(())
});
// this example uses the trillium client
// any other http client would work here too
let url = format!("https://127.0.0.1:{}/", port);
let client = trillium_client::Client::new(trillium_smol::ClientConfig::default());
let mut client_conn = client.get(&*url).await?;
assert_eq!(client_conn.status().unwrap(), 200);
assert_eq!(client_conn.response_headers().get_str("content-length"), Some("11"));
assert_eq!(
client_conn.response_body().read_string().await?,
"hello world"
);
stopper.stop(); // stop the server after one request
server_handle.await?; // wait for the server to shut down
依赖项
~7MB
~185K SLoC