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

项目地址 | 11,952 star | Rust | BSD-2-Clause

先把定位说透

quiche 是 Cloudflare 开源的 QUIC 传输协议和 HTTP/3 实现,按 IETF 规范写的,Rust 语言,许可证 BSD-2-Clause。

它的定位是低层 API。quiche 只做两件事:解析 QUIC 数据包,维护连接状态。socket 的读写、事件循环、定时器,全部由应用自己负责。README 原话就是这么写的。

这是刻意的设计,不是功能缺失。写这个库的人,目标用户也是写网络服务的人。如果你只是想发一个 HTTP/3 请求,这篇文章看个开头就够了,curl 直接能满足你。

谁在用它

三个使用方,每个都分量十足:

Cloudflare。自家边缘网络的 HTTP/3 支持跑在 quiche 上,全球流量在喂它。还开了个 cloudflare-quic.com 测试站,可以随时验证。

Android。系统级 DNS 解析器用 quiche 实现了 DNS over HTTP/3。一个第三方库能进 Android 系统组件,内存安全和跨平台这两关肯定过了。Google 的安全博客 2022 年专门写过一篇介绍。

curl。官方文档里给出了基于 quiche 的 HTTP/3 集成方案,照着做就能给 curl 加上 HTTP/3。

我觉得 Android 这个案例最有说服力。系统组件对依赖的挑剔程度远高于普通应用,能过审的库,质量不会差。

五分钟跑起来

仓库里附带 quiche-apps,提供客户端和服务端两个命令行工具。官方明确说了:不适合生产环境,体验协议用。

客户端一行命令,直接访问 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》,讲了这个库怎么来的,以及一些设计上的取舍。

这篇文章对你有帮助吗?

发表回复