Skip to content

UVHTTP内存安全已验证的 C HTTP 服务器

轻量、可嵌入的 C99 HTTP/1.1 与 WebSocket 库——同类中唯一经 ASan 与 UBSan 验证零内存安全问题者。支持 32 位嵌入式,CI 上 83K RPS,零泄漏。吞吐可测,内存安全可证。

📊 性能基准 ​

关键指标 (v2.7.1,GitHub CI 基准) ​

性能基准在 GitHub Actions ubuntu-latest runner 上测量,以确保硬件一致性。此前的本地基准(v2.6.x,约 20K RPS)在开发者硬件上测量,受 CPU 热降频影响方差高达 40%+。CI runner 消除了这一方差(CV 0.4–2.4%),提供了权威的、可复现的基线。

指标数值说明
峰值吞吐量~83K RPS10 连接,HTTP/1.1,GitHub CI runner
高并发~55K RPS1000 并发连接
静态文件5.7K RPS~100KB body,benchmark_unified
API 路由82K RPSJSON 端点
平均延迟~117µsP50,10 连接
错误率0%负载下零 socket 错误(10 连接)
测试套件101/101 通过ASan + UBSan 验证通过

内存安全与质量亮点 ​

  • AddressSanitizer:完整 101 项测试套件在启用泄漏检测下通过——零泄漏、零 use-after-free、零缓冲区溢出
  • UndefinedBehaviorSanitizer:完整套件通过——零未定义行为
  • 测试用例:101 项单元/集成测试,全部通过
  • CI/CD:每夜 ASan + UBSan 任务(见 .github/workflows/ci-nightly.yml)
  • 一键验证:make verify-memory-safety——参见内存安全
  • 高覆盖模块(≥95%):uvhttp_utils.c 100.0%、uvhttp_error.c 98.8%、uvhttp_version.c 98.3%、uvhttp_error_helpers.c 95.9%

性能优化 ​

  • Keep-Alive:连接复用避免每请求重新建立 TCP
  • TCP:默认启用 TCP_NODELAY 和 TCP_KEEPALIVE
  • 路由:O(1) 前缀匹配路由解析
  • 分配器:可选 mimalloc
  • libuv:直接调用,无抽象层

🎯 核心原则 ​

1. 专注核心功能 ​

UVHTTP 处理 HTTP/1.1 和 WebSocket 协议细节,不强加业务逻辑。应用层控制认证、数据库等特性。

2. 零开销抽象 ​

抽象均为编译期宏,生产构建无运行时成本。库直接调用 libuv,无中间层。

3. 极简工程 ​

代码库崇尚简洁。自包含依赖和干净架构保持维护成本低。

4. 测试分离 ​

生产代码不含测试专用代码。测试使用链接器包装和外部 mock 框架,库保持干净。

5. 零全局变量 ​

所有状态保存在 libuv 数据指针(loop->data 或 server->context)中。支持多实例和单元测试,无全局状态污染。

6. 错误处理 ​

统一的错误类型携带代码、描述和恢复提示。每个失败点都被检查和报告。


为什么选 UVHTTP(对比其他轻量 C HTTP 库) ​

大多数轻量 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 一键复现。

🔧 快速安装 ​

bash
# 克隆仓库(含子模块)
git clone --recurse-submodules https://github.com/adam-ikari/uvhttp.git
cd uvhttp

# 使用默认选项构建
make build

# 运行示例服务器
./build/dist/bin/hello_world

详细的安装说明和构建选项请参见安装指南。


📚 文档 ​

基于 MIT 许可证发布