欢迎光临
我们一直在努力

libhv ——运行官方内置的 HTTP 服务器示例 (bin/httpd)

 一、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

    赞(0)
    未经允许不得转载:171主机测评 » libhv ——运行官方内置的 HTTP 服务器示例 (bin/httpd)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址