一、libhv 简介
libhv 是一个由 ithewei 开发和维护的开源 C/C++ 网络库(Networking Library),旨在提供 轻量、跨平台、高性能、易用 的网络通信框架。
libhv 项目自带的一个完整 HTTP 服务器 demo,名为 httpd。
如何使用 libhv 处理:
-
静态文件服务(file server)
-
目录索引(indexof)
-
RESTful API 请求
-
表单 / JSON / 文件上传
-
多种 HTTP Method(GET、POST、DELETE 等)
运行 bin/httpd 之后,你相当于启动了一个 轻量级 Web 服务框架。
二、常用命令
1️⃣ 下载与构建
git clone https://github.com/ithewei/libhv.git
cd libhv
./configure
make
-
./configure 会自动检测系统环境,生成 Makefile。
-
make 会编译所有模块与示例程序,生成可执行文件在:./bin/目录下。
常见生成的文件包括:
bin/httpd # HTTP 服务程序
bin/curl # HTTP 客户端工具(类似 curl)
bin/tcp_echo # TCP echo 例程
bin/udp_echo # UDP 例程
✅ 构建方式
方式一:Autotools 构建(最简洁)
适合初学者和 Linux 系统环境。
命令:
git clone https://github.com/ithewei/libhv.git cd libhv ./configure make sudo make install
编译输出:
-
可执行文件在 bin/
-
静态库、动态库在 lib/
-
头文件在 include/
验证安装:
ls /usr/local/lib | grep libhv ls /usr/local/include/hv
方式二:CMake 构建(更通用)
前置依赖:
确保安装:
sudo apt-get install -y cmake build-essential
命令流程:
git clone https://github.com/ithewei/libhv.git cd libhv mkdir build && cd build cmake .. cmake –build . sudo cmake –install .
说明:
-
cmake ..:生成 Makefile 或 Ninja 构建配置
-
cmake –build .:执行构建
-
sudo cmake –install .:安装库和头文件
- 官网步骤:https://github.com/ithewei/libhv?tab=readme-ov-file
-
生成文件:
./configure
make
sudo make install或 cmake:
mkdir build
cd build
cmake ..
cmake –build .
2️⃣ 启动 HTTP 服务
查看帮助
bin/httpd -h
输出:
Usage: httpd [options]
Options:
-h, –help Show help
-v, –version Show version
-d, –daemon Run as daemon
-c, –conf FILE Specify config file (default: etc/httpd.conf)
-s start|stop|restart Manage service
启动服务(前台模式)
bin/httpd -d
这会在后台启动一个 Web 服务进程,默认监听 8080端口。
验证进程
ps aux | grep httpd
可看到类似:
user 12345 0.0 0.1 123456 6789 ? Ss 12:00 0:00 bin/httpd -d
3️⃣ 使用自带的 HTTP 客户端测试
libhv 自带了一个轻量版 curl 工具(bin/curl),它基于 libhv 的 HTTP 客户端实现。
用它可以测试 HTTP 服务的各种功能.
三、HTTP 服务功能演示
启动 bin/httpd -d 后,默认配置文件是:
etc/httpd.conf
其中定义了:
-
端口:8080
-
静态目录:downloads/
-
默认路由:ping、echo、query、json、form 等
我们来看每个示例命令对应的功能 👇
1️⃣ 静态文件服务
bin/curl -v localhost:8080
返回:
<html><body><h1>Welcome to libhv httpd!</h1></body></html>
2️⃣ 文件目录浏览
bin/curl -v localhost:8080/downloads/
显示 downloads 目录下的文件列表(类似 Nginx 的 indexof 功能)。
3️⃣ Ping 测试接口
bin/curl -v localhost:8080/ping
返回:
pong
4️⃣ Echo 接口
bin/curl -v localhost:8080/echo -d "hello,world!"
返回:
hello,world!
5️⃣ Query 参数示例
bin/curl -v "localhost:8080/query?page_no=1&page_size=10"
返回解析后的参数 JSON:
{
"page_no": "1",
"page_size": "10"
}
6️⃣ 表单与 JSON 解析
Form-urlencoded
bin/curl -v localhost:8080/kv \\
-H "Content-Type:application/x-www-form-urlencoded" \\
-d 'user=admin&pswd=123456'
JSON
bin/curl -v localhost:8080/json \\
-H "Content-Type:application/json" \\
-d '{"user":"admin","pswd":"123456"}'
返回的响应体会是服务器解析后的 JSON 对象。
7️⃣ 文件上传
普通 POST 上传
bin/curl -v localhost:8080/upload -d "@LICENSE"
表单上传
bin/curl -v localhost:8080/upload -F "file=@LICENSE"
上传的文件会存储在配置文件定义的上传目录中。
8️⃣ 多类型表单测试
bin/curl -v localhost:8080/test \\
-H "Content-Type:application/json" \\
-d '{"bool":true,"int":123,"float":3.14,"string":"hello"}'
返回服务器解析后的字段。
9️⃣ RESTful DELETE 请求
bin/curl -v -X DELETE localhost:8080/group/test/user/123
匹配路由规则 /group/:group_name/user/:user_id
会返回解析出的 group_name=test, user_id=123。
四、httpd.conf 配置文件解析
文件路径:
libhv/etc/httpd.conf
主要配置项示例:
# 监听端口
port=8080
# 静态文件目录
home=downloads
# 路由配置是否启用内置API
handlers=ping,echo,query,kv,json,form,upload,test
你可以自己添加新的接口或目录,然后重启服务:
bin/httpd -c etc/httpd.conf -s restart
五、总结
|
启动 HTTP 服务 |
bin/httpd -d |
默认端口8080 |
|
查看帮助 |
bin/httpd -h |
查看参数 |
|
访问首页 |
bin/curl localhost:8080 |
默认 HTML 页面 |
|
调用 API |
/ping, /echo, /json |
REST 测试接口 |
|
上传文件 |
/upload |
上传保存到服务器目录 |
|
停止/重启 |
-s stop / -s restart |
管理服务进程 |
尝试添加一个自己的接口:
router.GET("/time", [](HttpRequest* req, HttpResponse* resp) {
resp->body = hv::Datetime::now()->toString();
return 200;
});
重新编译运行,访问:
bin/curl localhost:8080/time





