Tokio 用于 Rust:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Tokio,为什么需要它?



Tokio 是 Rust 编程语言的异步运行时。它为编写快速、可靠且可扩展的网络应用程序提供了基础设施。如果你用 Rust 编写涉及网络、文件或需要无阻塞线程的并行请求处理的内容,那么你需要 Tokio。



与传统的多线程方法(每个请求在单独的 OS 线程中处理,成本高且有限)不同,Tokio 使用基于事件的异步 I/O 模型。单个线程可以处理数千个同时打开的连接,仅在当前任务等待时(例如,从套接字读取)在任务之间切换。



Tokio 不仅仅是一个库,它还是一个生态系统。它包括:

  • 运行时 — 任务调度器和事件驱动(epoll/kqueue/IOCP)
  • 标准网络协议 — TCP、UDP、Unix 套接字
  • 定时器 — sleep、interval、deadline
  • 同步 — 用于异步代码的互斥锁、信号量、屏障
  • 文件 I/O — 异步文件读/写
  • 工具 — 通道(mpsc、oneshot、broadcast)、缓冲区、编解码器


Tokio 是许多知名项目的基础,例如 Web 框架 Axum、HTTP 客户端 Reqwest、WebSocket Tungstenite、数据库 SQLx 等。



安装



与 Python(pip)或 Node.js(npm)不同,Rust 使用 Cargo 包管理系统。要安装 Tokio,请在 Cargo.toml 文件中添加依赖项:



[dependencies]tokio = { version = "1", features = ["full"] }


features = ["full"] 标志启用 Tokio 的所有功能。对于生产项目,建议只选择所需的功能,以减少编译时间和二进制文件大小:



[dependencies]tokio = { version = "1", features = ["rt", "macros", "net", "io-util", "time", "sync"] }


主要功能:

  • rt — 多线程运行时
  • macros — 宏 #[tokio::main] 和 tokio::select!
  • net — TCP、UDP、Unix 套接字
  • io-util — 异步 Reader/Writer
  • time — 定时器和 sleep
  • sync — 同步原语
  • fs — 异步文件系统操作
  • process — 异步命令执行
  • signal — OS 信号处理


快速入门



让我们创建一个简单的 HTTP 服务器,它对任何请求都响应 "Hello, World!"。为此,我们还需要 crate hyper(基于 Tokio 的 HTTP 库):



// Cargo.toml// [dependencies]// tokio = { version = "1", features = ["full"] }// hyper = { version = "1", features = ["server", "http1"] }

use hyper::service::service_fn;use hyper::{Request, Response, Server};use hyper::body::Incoming;use std::convert::Infallible;

async fn handle_request(_req: Request<Incoming>) -> Result<Response<String>, Infallible> { Ok(Response::new("Hello, World!".to_string()))}

#[tokio::main]async fn main() { let addr = ([127, 0, 0, 1], 3000).into(); let server = Server::bind(&addr).serve(service_fn(handle_request)); println!("Server running on http://{}", addr); if let Err(e) = server.await { eprintln!("Server error: {}", e); }}


运行 cargo run 并在浏览器中打开 http://127.0.0.1:3000。你将看到 "Hello, World!"。



主要方法和函数



1. tokio::spawn

推荐