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,没有任何附加条款或条件。