HTTP 作为互联网通信的核心协议,是 C/C++ 后端开发中构建网络服务的基础能力。本文将从 HTTP 核心请求方法入手,详解 C/C++ 实现 HTTP 服务的主流方式,结合实战代码示例,帮助开发者快速掌握从基础到进阶的实现思路。

一、Windows上使用
官网网址:libhv
1 下载及编译
shell
git clone https://github.com/ithewei/libhv.git
cd libhv
mkdir build
cd build
cmake ..
cmake命令之后进入libhv/build目录是这样的:

双击hv.sln后打开项目编译库,会出现一下画面:

将项目设置成Release之后,右键ALL_BUILD点击生成,开始编译代码:

生成结束之后回到libhv\build找到cmake_install.cmake,修改安装目录:

进入cmd,使用一下命令安装库:
shell
cmake -P cmake_install.cmake
头文件和库会自动安装到你上述修改的地方,如下图所示:

# 2 服务端客户端测试
## 2.1 Http服务端代码
```C++
#include "hv/HttpServer.h"
using namespace hv;
int main()
{
HttpService router;
router.GET("/ping", [](HttpRequest* req, HttpResponse* resp)
{
return resp->String("pong");
});
router.GET("/data", [](HttpRequest* req, HttpResponse* resp)
{
static char data[] = "0123456789";
return resp->Data(data, 10);
});
router.GET("/paths", [&router](HttpRequest* req, HttpResponse* resp)
{
return resp->Json(router.Paths());
});
router.GET("/get", [](HttpRequest* req, HttpResponse* resp)
{
resp->json["origin"] = req->client_addr.ip;
resp->json["url"] = req->url;
resp->json["args"] = req->query_params;
resp->json["headers"] = req->headers;
return 200;
});
router.POST("/echo", [](const HttpContextPtr& ctx)
{
return ctx->send(ctx->body(), ctx->type());
});
HttpServer server(&router);
server.setPort(8080);
server.setThreadNum(4);
server.run();
return 0;
}
2.2 Http客户端代码
c++
#include "hv/requests.h"
int main()
{
auto resp = requests::get("http://www.example.com");
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%s\n", resp->body.c_str());
}
resp = requests::post("127.0.0.1:8080/echo", "hello,world!");
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%s\n", resp->body.c_str());
}
return 0;
}
2.3 CMakeList.txt
cmake_minimum_required(VERSION 3.10)
project(libhv_demo)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(LIBHV_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/libhv_libs/include)
set(LIBHV_LIB_DIR ${PROJECT_SOURCE_DIR}/libhv_libs/libs)
include_directories(${LIBHV_INCLUDE_DIR})
add_executable(${PROJECT_NAME} main.cpp)
target_link_directories(${PROJECT_NAME} PRIVATE ${LIBHV_LIB_DIR})
target_link_libraries(${PROJECT_NAME} PRIVATE hv.lib)
if(WIN32)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${LIBHV_LIB_DIR}/hv.dll
$<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMENT "Copying hv.dll to output directory..."
)
endif()
二、Linux上使用
1 下载及编译
shell
git clone https://github.com/ithewei/libhv.git
cd libhv
mkdir build
cd build
cmake ..
# 这里如果直接make install 库会直接安装在/usr/local/目录底下
sudo make install
我这里选择安装目录,通过修改libhv/build/cmake_install.cmake文件,如下图所示:

我将目录修改成了自己的目录,不直接安装在系统中,修改完成之后在使用make install会发现,库会直接复制到你修改的目录下:

2 服务端客户端测试
这里的服务端客户端代码照抄windows上的代码即可,这里就不赘述。
总结
本文详细讲解了高性能网络库 libhv 在 Windows 与 Linux 平台下的下载、编译及部署流程,清晰梳理了库文件与头文件的整理规范,并提供了可直接复用的 CMakeLists 配置,实现跨平台项目快速集成。通过 HTTP 服务端与客户端实战代码,演示了 GET、POST 等核心请求方法的实现方式,涵盖接口路由、响应返回、数据交互等实用功能。libhv 凭借简洁的 API 设计、高效的异步 IO 模型,大幅降低了 C/C++ 开发 HTTP 服务的门槛,无论是 Windows 本地开发还是 Linux 服务器部署,都能快速构建稳定的网络服务,是后端开发者实现 HTTP 通信的优质选择。