Cloudflare 开源 tokio-quiche,这是一个异步 QUIC 和 HTTP/3 Rust 库,它将 Cloudflare 经过实战检验的 quiche 实现与 Tokio 运行时封装在一起,旨在简化高性能 QUIC 应用程序的开发。在内部,该库曾用于支撑边缘服务、Oxy HTTP 代理或基于 MASQUE 的隧道,取代了 WARP 客户端中的 Wireguard 隧道。
现在,Tokio-quiche 已经在 crates.io 上作为一个开源 crate 提供,其源代码托管在 quiche 代码库中。该库将 quiche 中的 sans-io QUIC/HTTP/3 实现和 Tokio 的异步运行时相结合,提供了一个经过深度优化的集成层,用于在诸如 Apple iCloud Private Relay、下一代基于 Oxy 的代理和 WARP 的 MASQUE 客户端等系统中处理每秒数百万的 HTTP/3 请求。

库架构图(图片来源:Cloudflare 博客)
按照设计,原 quiche 库是一个 sans-io QUIC 和 HTTP/3 的底层实现,可以嵌入到多种环境中,但要将其接入实际的应用程序则需要手动实现 UDP I/O、连接管理和事件循环。tokio-quiche 通过提供与 Tokio 的异步集成解决了这个问题:它管理 UDP 套接字,将数据报路由到连接,并驱动 quiche 的状态机,使开发者可以专注于应用程序逻辑而不是传输管道。

Tokio-quiche 内部数据流(图片来源:Cloudflare 博客)
在内部,tokio-quiche 使用了参与者(Actor)模型:入站数据包路由器和每个连接的 IO worker 参与者在套接字和 quiche 之间移动数据包,同时封装了状态和通过通道进行的通信。在此基础上,该库提供了 ApplicationOverQuic 特性,用于抽象化 QUIC 协议上的应用层协议执行。它提供了一个 H3Driver 实现(带有服务器和客户端变体),可以将 quiche 的原始 HTTP/3 事件转换为适合构建 HTTP/3 服务器和客户端的高级异步流。
Cloudflare 指出,tokio-quiche 支持内部工作负载,包括 HTTP/3 代理和基于 MASQUE 的隧道,有效地用基于 QUIC 的隧道取代了 WARP 中的 WireGuard 隧道。通过发布 tokio-quiche,Cloudflare 旨在为 Rust 生态系统采用 HTTP/3 和 QUIC 提供支持,包括 DNS-over-QUIC、自定义 VPN 和 HTTP 服务器等用例,并使外部集成与自身边缘服务中使用的技术栈保持一致。
该库的维护者强调,tokio-quiche 是一个基础构建块,而不是一个完整的 HTTP/3 框架:它提供了底层协议的能力和客户端/服务器事件循环示例,并计划开源目前支撑 Oxy 和 WARP 的更高级的 HTTP 客户端和服务器抽象。Cloudflare 还暗示,他们即将发布系列文章,介绍 Tokio 中的参与者模式、UDP GRO/GSO 协议以及基于 QUIC 的新服务(在 tokio-quiche 的基础上实现了每秒处理数百万请求的能力)。
原文链接:





