6个稳定版本
1.25.2 | 2023年6月6日 |
---|---|
1.25.1 | 2023年2月11日 |
1.23.0 | 2023年1月3日 |
1.21.3 | 2022年11月8日 |
1.21.2 | 2022年9月30日 |
#74 在 异步 中
4,692 每月下载量
用于 36 个crate(26直接使用)
2.5MB
36K SLoC
WebAssembly版本的Tokio
使用Rust编程语言编写可靠、异步和精简应用程序的运行时。这是原始tokio的分支,以便它可以编译成WebAssembly。WebAssembly应用程序可以在WasmEdge运行时中作为轻量级且安全的替代方案,替代Linux容器中的本地编译应用程序。
-
快速:Tokio的无成本抽象为您提供裸机性能。
-
可靠:Tokio利用Rust的所有权、类型系统和并发模型来减少错误并确保线程安全。
-
可扩展:Tokio具有最小的影响,并自然处理背压和取消。
概述
Tokio是使用Rust编程语言编写的异步应用程序的事件驱动、非阻塞I/O平台。从高层次来看,它提供了一些主要组件
这些组件提供了构建异步应用程序所需的运行时组件。
示例
使用Tokio的基本TCP回显服务器。
确保在Cargo.toml中激活了tokio crate的完整功能
[dependencies]
tokio_wasi = { version = "1.25", features = ["full"] }
然后,在main.rs中
use tokio::net::TcpListener;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
loop {
let (mut socket, _) = listener.accept().await?;
tokio::spawn(async move {
let mut buf = [0; 1024];
// In a loop, read data from the socket and write the data back.
loop {
let n = match socket.read(&mut buf).await {
// socket closed
Ok(n) if n == 0 => return,
Ok(n) => n,
Err(e) => {
eprintln!("failed to read from socket; err = {:?}", e);
return;
}
};
// Write the data back
if let Err(e) = socket.write_all(&buf[0..n]).await {
eprintln!("failed to write to socket; err = {:?}", e);
return;
}
}
});
}
}
更多示例可以在这里找到。对于更大的“真实世界”示例,请参阅mini-redis存储库。
许可证
本项目采用MIT许可证。
贡献
除非您明确声明,否则您提交的任何有意包含在Tokio中的贡献,均应按照MIT许可,不附加任何额外条款或条件。
依赖关系
~0–12MB
~115K SLoC