🛡️ 内存安全已验证
ASan + UBSan 零问题——101/101 测试,零泄漏,每夜 CI。
性能基准在 GitHub Actions ubuntu-latest runner 上测量,以确保硬件一致性。此前的本地基准(v2.6.x,约 20K RPS)在开发者硬件上测量,受 CPU 热降频影响方差高达 40%+。CI runner 消除了这一方差(CV 0.4–2.4%),提供了权威的、可复现的基线。
| 指标 | 数值 | 说明 |
|---|---|---|
| 峰值吞吐量 | ~83K RPS | 10 连接,HTTP/1.1,GitHub CI runner |
| 高并发 | ~55K RPS | 1000 并发连接 |
| 静态文件 | 5.7K RPS | ~100KB body,benchmark_unified |
| API 路由 | 82K RPS | JSON 端点 |
| 平均延迟 | ~117µs | P50,10 连接 |
| 错误率 | 0% | 负载下零 socket 错误(10 连接) |
| 测试套件 | 101/101 通过 | ASan + UBSan 验证通过 |
.github/workflows/ci-nightly.yml)make verify-memory-safety——参见内存安全TCP_NODELAY 和 TCP_KEEPALIVEUVHTTP 处理 HTTP/1.1 和 WebSocket 协议细节,不强加业务逻辑。应用层控制认证、数据库等特性。
抽象均为编译期宏,生产构建无运行时成本。库直接调用 libuv,无中间层。
代码库崇尚简洁。自包含依赖和干净架构保持维护成本低。
生产代码不含测试专用代码。测试使用链接器包装和外部 mock 框架,库保持干净。
所有状态保存在 libuv 数据指针(loop->data 或 server->context)中。支持多实例和单元测试,无全局状态污染。
统一的错误类型携带代码、描述和恢复提示。每个失败点都被检查和报告。
大多数轻量 C HTTP 库只追求峰值 RPS。UVHTTP 优化的核心是内存安全——这是生产环境不可妥协的属性。一个能在 10 秒基准测试中存活下来的每连接泄漏或 use-after-free,会在一周内让嵌入式设备 OOM。UVHTTP 是轻量、可嵌入、支持 32 位的 C 库,并在每夜 CI 中以 ASan 与 UBSan 双重验证,证明这类 bug 已根除。
| 库 | 可嵌入 C 库 | 32 位 | ASan-clean(已验证) | UBSan-clean(已验证) |
|---|---|---|---|---|
| UVHTTP | ✅ | ✅ | ✅ 101/101,每夜 CI | ✅ 101/101,每夜 CI |
| libuv-http | ✅ | ⚠️ | ❓ 未公开 | ❓ 未公开 |
| microhttpd | ✅ | ⚠️ | ❓ 未公开 | ❓ 未公开 |
| mongoose | ✅ | ✅ | ❓ 未公开 | ❓ 未公开 |
| nginx | ❌(独立进程) | ✅ | ✅(大团队) | ❓ |
“未公开”表示该项目未发布 sanitizer-clean 测试门禁,故“无 finding”不可验证。 UVHTTP 的可通过
make verify-memory-safety一键复现。
# 克隆仓库(含子模块)
git clone --recurse-submodules https://github.com/adam-ikari/uvhttp.git
cd uvhttp
# 使用默认选项构建
make build
# 运行示例服务器
./build/dist/bin/hello_world详细的安装说明和构建选项请参见安装指南。