libuhttpd:一个专门给嵌入式 Linux 用的 HTTP/HTTPS 服务端库


嗨,先聊聊libuhttpd到底啥
说白了,libuhttpd 就是一个专门给嵌入式 Linux 用的 HTTP/HTTPS 服务端库,你可以把它当成一个比 Nginx 更“小钢炮”的家伙。它基于 libev(事件驱动)和 http-parser(超快解析器)打造,代码很简洁又灵活,用它就能给你的设备、IoT、路由器啥的,塞进一个 HTTP 服务,性能还杠杠的。


它能解决哪些痛点

  • • 资源占用可控:传统的 Nginx、Apache 在嵌入式环境里有点肉,编译体积、内存占用都偏大。libuhttpd 把依赖砍到最低,跑起来超省资源。

  • • 学习曲线平缓:内部结构清晰,C 语言小伙伴读几次代码就能上手,不用把整个项目读个遍。

  • • 灵活扩展:想要加个 CGI、上传大文件、支持插件、甚至自定义路由,都能优雅地插进去。

  • • HTTPS 全家桶:OpenSSL、mbedtls、wolfssl(三选一),想要哪个就编哪个,马上就能上 HTTPS。

  • • 多进程模型:和 Nginx 一样,主进程能 fork 多 worker,不怕高并发来砸门。


核心特性一览表

特性

说明

事件驱动

基于 libev,超高并发场景毫无压力

HTTP 解析

依赖 node.js 同款 http-parser,速度秒杀自家手写解析

HTTPS 支持

OpenSSL / mbedtls / wolfssl

IPv6、CGI、插件

一应俱全,直接开箱即用

大文件上传 & Range

支持分片续传、断点下载

多进程模型

Nginx 同款:master + worker


用个简单代码感受下它的魔力

  1. 1. 克隆并编译

    git clone https://github.com/zhaojh329/libuhttpd.git
    cd libuhttpd
    mkdir build && cd build
    cmake ..
    make
  2. 2. 写个最简单的服务

    // simple_server.c
    #include "uhttpd.h"

    static void hello_cb(struct uh_request *req, void *arg){
        uh_send_header(req,200,"OK","text/plain");
        uh_send_body(req,"Hello from libuhttpd!\n",22);
        uh_end(req);
    }

    int main(){
        struct uh_server *srv = uh_create_server(":8080",NULL);
        uh_register_handler(srv,"/hello", UH_GET, hello_cb,NULL);
        uh_run(srv);
        uh_free_server(srv);
        return 0;
    }
  3. 3. 运行 & 测试

    ./simple_server
    curl http://127.0.0.1:8080/hello
    # Hello from libuhttpd!

你会发现,整个流程妙到毫巅:几行 C 代码就能跑起来,而且性能爆表。


优缺点大揭秘

优点

  • • 极简轻量:编译后库文件几百 KB,运行时内存占用低

  • • 高性能:在相同测试环境下,libuhttpd 每秒请求量比 Nginx 高近 1.7 倍

  • • 易扩展:插件、CGI、用户自定义 hook 都能随意接入

  • • 多 SSL 引擎:按需选择 OpenSSL / mbedtls / wolfssl

缺点

  • • 功能没那么“全家桶”:不像 Nginx 那么多官方模块,得自己动手写插件

  • • 部分平台适配:虽然支持嵌入式 Linux,但在极瘦的 RTOS 上要移植一下

  • • 社区相对小众:遇到问题可能得靠自己翻源码,社区反馈不如大厂项目活跃


最后的话,总结一下
其实你如果想在一个小硬件或者 Docker 容器里,快速、轻量、稳健地跑一个 HTTP/HTTPS 服务,又不想引入 Nginx、Apache 那么庞大的东西,libuhttpd 真是特别合适的选择。它性能靠得住,代码一看就明白,SSL、IPv6、CGI、Range……一应俱全。唯一要准备的是自己写点插件、自己调试下可能的小 bug,但相信对于大部分嵌入式、IoT 场景,这套“轻+快”组合,能让你的项目少吃很多苦头。

项目地址:https/github.com/zhaojh329/libuhttpd

发表评论