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

相关推荐
桦020 小时前
【C++复习】:继承
开发语言·c++
鱼难终20 小时前
类和对象(下)
c++
云泽80821 小时前
深入 AVL 树:原理剖析、旋转算法与性能评估
数据结构·c++·算法
邪神与厨二病1 天前
Problem L. ZZUPC
c++·数学·算法·前缀和
左手厨刀右手茼蒿1 天前
Flutter 组件 http_requests 适配鸿蒙 HarmonyOS 实战:极简网络请求,构建边缘端轻量级 RESTful 通讯架构
网络·flutter·http
elseif1231 天前
出题团招人【ETOI_】
c++
第二只羽毛1 天前
C++ 高并发内存池1
大数据·开发语言·c++·开源
不想看见4041 天前
C++/Qt 实习岗位深度解析【结合一次研发实习谈感受】
开发语言·c++·qt
王老师青少年编程1 天前
信奥赛C++提高组csp-s之组合数学专题课:鸽巢原理详解及案例实践
c++·组合数学·信奥赛·抽屉原理·csp-s·提高组·鸽巢原理
njidf1 天前
C++与Qt图形开发
开发语言·c++·算法