| Crates.io | zerust |
| lib.rs | zerust |
| version | 1.0.4 |
| created_at | 2025-08-06 14:58:40.77164+00 |
| updated_at | 2025-08-13 14:48:10.476208+00 |
| description | Zero-cost Zinx for Rust |
| homepage | |
| repository | https://github.com/zhaowuzu/Zerust |
| max_upload_size | |
| id | 1783894 |
| size | 92,065 |
Zerust 是一个轻量级的 Rust 网络框架,灵感来源于 Go 语言的 Zinx 框架。它提供了简单易用的 API 和高效的网络通信功能。
cargo doc 生成完整的 API 文档在你的项目的 Cargo.toml 文件中添加:
[dependencies]
zerust = "1.0.3"
以下是一个完整的回显服务器示例,包含服务器启动、路由配置、客户端测试和优雅关闭的完整生命周期:
use std::sync::Arc;
use std::time::Duration;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::TcpStream;
use tokio::sync::oneshot;
use zerust::datapack::DataPack;
use zerust::{DefaultRouter, Response, Server};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建关闭通道:用于外部控制服务器生命周期
let (shutdown_tx, shutdown_rx) = oneshot::channel::<()>();
// 创建并配置路由器
let router = Arc::new(DefaultRouter::new());
// 注册 msg_id = 1 的回显处理函数
let router_clone = router.clone();
router_clone.add_route(1, |req| {
println!("Received echo request: {:?}", req.data());
Response::new(req.msg_id(), req.data().to_vec()) // 原样返回
});
// 启动服务器(异步任务)
let server = Server::new("127.0.0.1:8000", router);
let server_handle = tokio::spawn(async move {
if let Err(e) = server.run(shutdown_rx).await {
eprintln!("[Zerust] Server runtime error: {}", e);
}
});
// 等待服务器就绪
tokio::time::sleep(Duration::from_millis(100)).await;
println!("[Client] Server is ready. Proceeding with test...");
// 客户端测试
let mut stream = TcpStream::connect("127.0.0.1:8000").await?;
println!("Connected to server");
// 构造请求:msg_id=1, data="test"
let bytes = DataPack::pack(1, b"test");
stream.write_all(&bytes).await?;
println!("Sent request: msg_id=1, data=test");
// 读取响应头(8字节)
let mut header = [0u8; 8];
stream.read_exact(&mut header).await?;
let (msg_id, data_len) = DataPack::unpack_header(&header)?;
// 读取响应数据
let mut data = vec![0u8; data_len as usize];
stream.read_exact(&mut data).await?;
println!(
"Received response: msg_id={}, data={:?}",
msg_id,
String::from_utf8_lossy(&data)
);
// 发送关闭信号
let _ = shutdown_tx.send(());
println!("[Main] Shutdown signal sent.");
// 等待服务器完全停止
let _ = server_handle.await;
println!("🎉 Program exited gracefully.");
Ok(())
}
完整示例代码可在 examples/echo_server_v1.rs 中找到,运行方式:
cargo run --example echo_server_v1
详细的 API 文档可以通过以下命令生成:
cargo doc --open
也可以参考已发布的文档:https://crates.io/crates/zerust
所有的源代码文件都包含详细的文档注释,包括模块、结构体、方法和函数的说明,以及使用示例。
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
🤝 我们遵循 Contributor Covenant 行为准则,欢迎所有贡献者。