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日

#805HTTP服务器

Download history 1371/week @ 2024-04-30 542/week @ 2024-05-07 1173/week @ 2024-05-14 785/week @ 2024-05-21 1490/week @ 2024-05-28 1116/week @ 2024-06-04 1497/week @ 2024-06-11 1092/week @ 2024-06-18 568/week @ 2024-06-25 458/week @ 2024-07-02 823/week @ 2024-07-09 904/week @ 2024-07-16 812/week @ 2024-07-23 856/week @ 2024-07-30 797/week @ 2024-08-06 599/week @ 2024-08-13

每月下载量3,417
用于 50 个crate(直接使用11个)

MIT/Apache

255KB
5K SLoC

欢迎来到Trillium!

📖 指南 📖

该指南提供了架构概述以及连接Trillium crate的概览。

📑 Rustdocs 📑

Rustdocs代表了学习Trillium的各个crate及其特定接口的最好方式。




法律

许可协议为以下之一

任选其一。

除非您明确表示,否则根据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