libhv是一个比libevent、libev、libuv更易用的跨平台国产网络库,用来开发TCP/UDP/SSL/HTTP/WebSocket客户端/服务端。
项目地址:https://github.com/ithewei/libhv.git
码云镜像:https://gitee.com/libhv/libhv.git
编译与安装
libhv提供了原生Makefile(这里仅指适用于类unix系统的Makefile)和cmake两种构建方式。
Makefile命令行
CLI即Command Line Interface命令行界面。鄙人强烈推荐使用的一种,特别是对于服务端开发人员,必备技能。
对于类Unix系统平台来说,推荐使用Makefile三部曲
./configure make sudo make install Windows平台编译libhv请使用cmake先生成VS工程,各平台具体编译步骤见BUILD.md
cmake命令行
cmake -B build cmake --build build
cmake图形界面(照顾下小白)
windows编译教程:
windows cmake下载:https://github.com/Kitware/CMake/releases/download/v3.21.2/cmake-3.21.2-windows-x86_64.msi
创建win64目录,使用cmake-gui,目录选择libhv目录,编译目录选择win64
在设置完源代码目录和目标目录之后,点击Configure(设置)按钮,让CMake读取设置和源代码。我们接下来需要选择工程的生成器,由于我们使用的是Visual Studio 2015,我们选择 Visual Studio 14 选项(因为Visual Studio 2015的内部版本号是14)。CMake会显示可选的编译选项用来配置最终生成的库。这里我们使用默认设置,并再次点击Configure(设置)按钮保存设置。保存之后,点击Generate(生成)按钮,生成的工程文件会在你的build文件夹中。
windows链库说明
cmake生成vs工程,打开hv.sln编译后会生成头文件include/hv、静态库lib/hv_static.lib和动态库lib/hv.dll,所以有动态库和静态库两种链库方式。
动态导入库hv.lib + 动态库hv.dll
工程 => 属性 => Linker => Input => Addtional Dependencies 加hv.lib
或代码里添加
#pragma comment(lib, “hv.lib”)
静态库声明宏HV_STATICLIB + 静态库hv_static.lib
工程 => 属性 => c/c++ => 预处理器 => 预处理器定义中添加HV_STATICLIB预编译宏,以屏蔽hexport.h头文件中动态库导入宏
#define HV_EXPORT __declspec(dllimport)
工程 => 属性 => Linker => Input => Addtional Dependencies 加 hv_static.lib
或代码里添加
#pragma comment(lib, “hv_static.lib”)
一般使用默认配置即可,如需勾选WITH_OPENSSL,请先自行安装openssl
vcpkg
也可通过vcpkg安装:
vcpkg install libhv
注:vcpkg上的版本可能更新较慢,如需体验最新版还是推荐下载源码编译。
编译产物
头文件
类unix系统默认安装在/usr/local/include/hv目录下
.
├── Buffer.h 缓存类 ├── Callback.h 回调定义 ├── Channel.h IO通道类 ├── Event.h 事件类 ├── EventLoop.h 事件循环类 ├── EventLoopThread.h 事件循环线程类 ├── EventLoopThreadPool.h 事件循环线程池类 ├── HttpMessage.h HTTP消息类 ├── HttpParser.h HTTP解析类 ├── HttpServer.h HTTP服务类 ├── HttpService.h HTTP业务类 ├── Status.h 状态类 ├── TcpClient.h TCP客户端类 ├── TcpServer.h TCP服务端类 ├── ThreadLocalStorage.h 线程本地存储类 ├── UdpClient.h UDP客户端类 ├── UdpServer.h UDP服务端类 ├── WebSocketChannel.h WebSocket通道类 ├── WebSocketClient.h WebSocket客户端类 ├── WebSocketParser.h WebSocket解析类 ├── WebSocketServer.h WebSocket服务端类 ├── base64.h BASE64编解码 ├── grpcdef.h grpc定义 ├── hatomic.h 原子操作 ├── hbase.h 基本函数 ├── hbuf.h 缓存buffer ├── hconfig.h configure生成配置 ├── hdef.h 常见宏定义 ├── hdir.h 目录(ls实现) ├── hendian.h 大小端 ├── herr.h 错误码定义 ├── hexport.h DLL导出宏 ├── hfile.h 文件类 ├── hlog.h 日志 ├── hloop.h 事件循环 ├── hmain.h 命令行解析 ├── hmath.h 数学函数 ├── hmutex.h 互斥锁 ├── hobjectpool.h 对象池 ├── hplatform.h 平台相关宏 ├── hproc.h 进程 ├── hscope.h 作用域 ├── hsocket.h 套接字 ├── hssl.h SSL/TLS加密 ├── hstring.h 字符串操作 ├── hsysinfo.h 系统信息 ├── hthread.h 线程操作 ├── hthreadpool.h 线程池类 ├── htime.h 日期时间 ├── http2def.h http2定义 ├── http_client.h HTTP客户端 ├── http_content.h HTTP Content-Type ├── httpdef.h http定义 ├── hurl.h URL操作 ├── hv.h hv总头文件 ├── hversion.h 版本 ├── ifconfig.h ifconfig实现 ├── iniparser.h INI解析类 ├── json.hpp JSON解析 ├── md5.h MD5数字摘要 ├── nlog.h 网络日志 ├── nmap.h 主机发现 ├── requests.h 模拟python requests api ├── sha1.h SHA1安全散列算法 └── singleton.h 单例模式宏
库文件
静态库libhv.a或libhv_static.a
windows动态库hv.dll
linux动态库libhv.so
macosx动态库libhv.dylib
示例程序
├── hmain_test 命令行解析测试程序 ├── hloop_test 事件循环测试程序 ├── htimer_test 定时器测试程序 ├── http_client_test HTTP客户端测试程序 ├── http_server_test HTTP服务端测试程序 ├── websocket_client_test WebSocket客户端测试程序 ├── websocket_server_test WebSocket服务端测试程序 ├── curl HTTP客户端 ├── httpd HTTP服务端 ├── nc 网络客户端 ├── nmap 主机发现 ├── tcp_chat_server TCP聊天服务 ├── tcp_echo_server TCP回显服务 ├── tcp_proxy_server TCP代理服务 └── udp_echo_server UDP回显服务
另外,仓库通过 Github Actions 确保master分支在linux、windows、macosx三个平台编译通过,大家再也不用担心编译不过了。