Tokio
一个用 Rust 编程语言编写可靠的、异步的、纤细的应用程序的运行时。它的特点是:
- 快速:Tokio 的零成本抽象为你提供了裸机性能。
- 可靠:Tokio 利用 Rust 的所有权、类型系统和并发模型来减少错误并确保线程安全。
- 可扩展性:Tokio (对系统资源)占用极小,并自然地处理背压和撤销。
概述
Tokio 是一个事件驱动的、非阻塞的 I/O 平台,用于使用 Rust 编程语言编写异步应用程序。在高层次上,它提供了几个主要组件:
这些组件为构建异步应用程序提供了必要的运行时组件。
例子
一个基于 Tokio 的基本的 TCP echo 服务器:
use tokio::net::TcpListener;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut 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 资源库。
要查看可以启用的可用特性标志列表,请查看我们的 文档。
获得帮助
首先,看看你的问题是否可以在 指南 或 API 文档 中找到答案。如果没有答案,Tokio Discord 服务器 上有一个活跃的社区。我们很乐意回答您的问题。你也可以在 讨论页面 提出你的问题。
贡献
感谢你对项目的帮助改进!我们很高兴有你的帮助。我们很高兴有您的参与! 我们有一个 贡献指南 来帮助你参与到Tokio项目中。
相关项目
除了这个仓库中的箱子,Tokio 项目还维护了其他几个库,包括:
hyper:一个快速正确的 HTTP/1.1 和 HTTP/2 的 Rust实现。tonic一个基于 HTTP/2 的 gRPC 实现,专注于高性能,互操作性和灵活性。warp:一个超级简单的、可组合的神速 web 服务器框架。tower:一个模块化和可重复使用的组件库,用于构建强大的网络客户端和服务器。tracing(原 tokio-trace)。一个应用级跟踪和异步诊断的框架。rdbc:Rust 数据库连接库,用于 MySQL、Postgres 和 SQLite。mio:一个低级的、跨平台的操作系统 I/O APIs 抽象,为 tokio 提供动力。bytes:用于处理字节的实用工具,包括高效的字节缓冲器。loom:一个用于并发 Rust 代码的测试工具
支持的 Rust 版本
Tokio 是根据最新的稳定版本构建的。最低支持的版本是 1.45。目前的 Tokio 版本并不保证能在 Rust 早于最小支持版本的版本上构建。
许可证
本项目采用 MIT 授权。
贡献
除非您另有明确说明,否则您故意提交的任何稿件都将被授权为 MIT,没有任何附加条款或条件。