tokio-rs/tokio
GitHub: tokio-rs/tokio
Tokio 是 Rust 语言的主流异步运行时,为构建高性能、可靠的异步应用程序提供事件驱动、非阻塞 I/O 和多线程任务调度能力。
Stars: 31346 | Forks: 2955
# Tokio
一个用于使用 Rust 编程语言编写可靠、异步且轻量级应用程序的运行时。它具有以下特点:
* **快速**:Tokio 的零成本抽象为您带来裸机般的性能。
* **可靠**:Tokio 利用 Rust 的所有权、类型系统和并发模型来减少错误并确保线程安全。
* **可扩展**:Tokio 占用空间极小,并能自然地处理反向压力和取消操作。
[][crates-url]
[][mit-url]
[][actions-url]
[][discord-url]
[网站](https://tokio.rs) |
[指南](https://tokio.rs/tokio/tutorial) |
[API 文档](https://docs.rs/tokio/latest/tokio) |
[聊天](https://discord.gg/tokio)
## 概述
Tokio 是一个事件驱动的非阻塞 I/O 平台,用于使用 Rust 编程语言编写异步应用程序。从宏观角度来看,它提供了几个主要组件:
* 一个基于工作窃取的多线程任务 [scheduler]。
* 一个由操作系统事件队列(epoll, kqueue, IOCP 等)支持的 reactor。
* 异步 [TCP 和 UDP][net] 套接字。
这些组件提供了构建异步应用程序所需的运行时组件。
## 示例
一个使用 Tokio 的基本 TCP echo 服务器。
请确保在 Cargo.toml 中启用 tokio crate 的完整功能:
```
[dependencies]
tokio = { version = "1.50.0", features = ["full"] }
```
然后,在你的 main.rs 中:
```
use tokio::net::TcpListener;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box> {
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(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;
}
}
});
}
}
```
更多示例可以在 [这里][examples] 找到。对于一个更大的“真实世界”示例,请参阅 [mini-redis] 仓库。
要查看可以启用的可用功能标志列表,请查看我们的 [文档][feature-flag-docs]。
## 获取帮助
首先,看看能否在 [指南][Guides] 或 [API 文档][API documentation] 中找到你问题的答案。如果答案不在那里,[Tokio Discord 服务器][chat] 中有一个活跃的社区。我们很乐意尝试回答你的问题。你也可以在 [讨论页面][discussions] 上提问。
## 相关项目
除了这个仓库中的 crates 外,Tokio 项目还维护着几个其他库,包括:
* [`axum`]:一个专注于人体工程学和模块化的 Web 应用程序框架。
* [`hyper`]:一个快速且正确的 Rust HTTP/1.1 和 HTTP/2 实现。
* [`tonic`]:一个专注于高性能、互操作性和灵活性的基于 HTTP/2 的 gRPC 实现。
* [`warp`]:一个超级简单、可组合的 Web 服务器框架,旨在提供极快的速度。
* [`tower`]:一个用于构建健壮网络客户端和服务器的模块化可重用组件库。
* [`tracing`](前身是 `tokio-trace`):一个用于应用程序级追踪和异步感知诊断的框架。
* [`mio`]:一个基于操作系统 I/O API 的底层跨平台抽象,为 `tokio` 提供支持。
* [`bytes`]:用于处理字节的实用程序,包括高效的字节缓冲区。
* [`loom`]:一个用于 Rust 并发代码的测试工具。
## 更新日志
Tokio 仓库包含多个 crates。每个 crate 都有自己的更新日志。
* `tokio` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio/CHANGELOG.md)
* `tokio-util` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-util/CHANGELOG.md)
* `tokio-stream` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-stream/CHANGELOG.md)
* `tokio-macros` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-macros/CHANGELOG.md)
* `tokio-test` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-test/CHANGELOG.md)
## 支持的 Rust 版本