C++ libhv使用教程教程00–目录

334次阅读
没有评论

共计 3226 个字符,预计需要花费 9 分钟才能阅读完成。

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”)

C++ libhv使用教程教程00--目录

一般使用默认配置即可,如需勾选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三个平台编译通过,大家再也不用担心编译不过了。

正文完
 
admin
版权声明:本站原创文章,由 admin 2021-09-11发表,共计3226字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码