libhv 安装与使用全流程教程

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 通信的优质选择。

相关推荐
郝学胜-神的一滴6 小时前
[简化版 GAMES 101] 计算机图形学 08:三角形光栅化上
c++·unity·游戏引擎·godot·图形渲染·opengl·unreal
佳xuan7 小时前
简而言之c++
c++·算法
屯子来了7 小时前
Windows + VS2022 + UE5.2 编译 Fast DDS 2.14.0 完整记录
c++·ue5·fastdds
顶点多余7 小时前
自定义协议、序列化、反序列化实现
java·linux·开发语言·c++·tcp/ip
Bruce_kaizy7 小时前
c++ linux环境编程——从应用层到linux内核深入了解文件io的调用机制(爆肝)
linux·c++·c·嵌入式linux·文件io
z200509308 小时前
C++中的右值引用
开发语言·c++
故事还在继续吗8 小时前
高性能网络
服务器·网络·c/c++
代码中介商8 小时前
C++文件流操作全解析
开发语言·c++
会周易的程序员8 小时前
aiDgeScanner架构与实现
c++·ide·物联网·架构·node.js·aiot
王老师青少年编程8 小时前
csp信奥赛C++高频考点专项训练之字符串 --【字符串排序】:生日
c++·字符串·csp·高频考点·信奥赛·生日·字符串排序