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

相关推荐
小小杨树21 分钟前
【C++】学习:双缓冲视频流水线深解析
c++·性能优化·音视频开发
青少儿编程课堂2 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
赵民勇2 小时前
C++无锁编程详解
c++
醉颜凉2 小时前
C++ 中野指针与悬挂指针的区别:从成因到防范,彻底讲清两种危险指针
c++
Demon--hx2 小时前
设计不能被继承的类
开发语言·c++
兔兔兔兔12 小时前
记录C++ 13
开发语言·c++·算法
开心大爆炸3 小时前
ubuntu20.4 安装ros1 noetic版本流程
c++
楷哥爱开发5 小时前
HTTP代理是什么?性能分析、适用场景与配置教程
网络·网络协议·http
欧特克_Glodon5 小时前
OpenCV计算机视觉开发入门与实践<二十四>:几何变换之平移、缩放、旋转
c++·人工智能·opencv·计算机视觉
IPdodo_5 小时前
2026年AI 数据采集代理 IP 选型:成功率、并发、轮换与成本评估
前端·网络·人工智能·chrome·python·http·网络调试