📌 项目地址cloudflare/quiche | ⭐ 11,952 颗星 | 🔧 Rust | 📜 未标注

先说清楚它是什么

quiche 是 Cloudflare 用 Rust 写的 QUIC 传输协议和 HTTP/3 实现,按 IETF 规范来,BSD-2-Clause 许可证,将近 12000 个 star。

它的定位很关键:低层 API。quiche 只负责两件事,解析 QUIC 数据包,维护连接状态。socket 的读写、事件循环、定时器,全都要你自己写。README 里写得很直白:应用负责提供 I/O 和带定时器的事件循环。

这不是偷懒,是刻意的设计。它的用户是写网络服务的人,或者给已有系统加 HTTP/3 支持的人。如果你只想发个 HTTP/3 请求,看到这里就可以关掉了。

谁在用它(这部分最有说服力)

三个使用方,分量都不轻:

  • Cloudflare:自家边缘网络的 HTTP/3 全靠 quiche 撑着,还开了个 cloudflare-quic.com 供人测试
  • Android:系统级 DNS 解析器用 quiche 实现了 DNS over HTTP/3,这是写进系统里的依赖
  • curl:官方文档里基于 quiche 的 HTTP/3 集成方案

Android 敢把它放进系统组件,说明内存安全和跨平台这两关都过了。用 Rust 写协议栈的收益在这里看得见。

五分钟跑起来

仓库里的 quiche-apps 提供了客户端和服务端两个命令行工具。官方提醒过,这些工具不适合生产环境,拿来体验协议没问题。

先按 Building 部分的说明把仓库克隆下来,然后:

客户端直接访问 Cloudflare 的测试站:

cargo run --bin quiche-client -- https://cloudflare-quic.com/

服务端用仓库自带的自签名证书就能起:

cargo run --bin quiche-server -- --cert apps/src/bin/cert.crt --key apps/src/bin/cert.key

注意那个证书是自签名的,生产环境别用。每个工具加 --help 能看到完整参数列表。

代码长什么样

建立 QUIC 连接的第一步是创建 Config 对象:

let mut config = quiche::Config::new(quiche::PROTOCOL_VERSION)?;
config.set_application_protos(&[b"example-proto"]);

// Additional configuration specific to application and use case...

Config 管着连接的核心属性:QUIC 版本、ALPN、流控、拥塞控制、空闲超时等等。

有一处设计值得单独说:QUIC 是通用传输协议,很多配置项没有合理的默认值。README 举的例子是并发流数量上限,这类参数完全取决于你的应用怎么用 QUIC。换句话说,用 quiche 之前你得先懂 QUIC,别指望默认配置兜底。

这和那些“三行代码跑起来”的框架是两个物种。换来的东西也很明确:传输层的控制权全在你手里。Cloudflare 拿它跑全球边缘网络,Android 拿它做 DNS over HTTP/3,都是标准 HTTP/3 之外的玩法,低层 API 才撑得住这种自由度。

一句话结论

适合在自有服务里集成 QUIC/HTTP/3、愿意自己管 I/O 的人。不适合只想要个 HTTP 客户端的人,那种需求用 curl 就够了。

API 文档在 docs.rs/quiche,设计背景可以读 Cloudflare 博客的那篇《Enjoy a Slice of Quic… and Rust》。

这篇文章对你有帮助吗?

发表回复