当前位置: 首页 > 工具软件 > libhv > 使用案例 >

libhv源码分析

庄文栋
2023-12-01
  • C demo:参考目录:examples
  • C++ demo:参考目录:evpp

啰嗦一句

如果作为服务器开发,不建议使用hv的log作为日志工具记录日志,因为该日志是同步写文件的,可能严重影响服务器效率,可以使用log4cplus或者其他。对于性能没有太高要求的程序,hvlog是一个便捷的开发工具。

目录结构分析

  • base目录:基于C实现跨平台的常用接口,例如线程,socket,时间计算,线程同步(mutext,rwlock)等
  • cpputil目录:基于C++实现部分常用函数功能封装,例如ini读取,线程池,单实例等
  • event目录:libhv的核心,封装了io,事件循环(实现思想和libevent类似),网络模型(epoll,iocp,select)的实现等。
  • ssl目录:对不同版本ssl的封装支持。
  • util目录:常用算法的实现,例如:md5,base64,sha1等
  • http,mqtt,protocol目录:基于tcp/udp对应用层协议的封装,后期可能更多
  • unittest目录:对功能接口的单元测试代码,例如base目录的线程
  • examples,evpp目录:基于C,C++的demo实例

libhv

libhv的基础代码封装:base目录cpputil 这部分目录可以作为通用移植代码,非常值得借鉴和学习。
里面对不同平台函数进行封装,例如:
hmutex.h对不同平台下的mutex进行封装。
list.h双向链表的通用版的封装,具体使用可参考:二叉堆算法实现
heap.h基于树的二叉堆封装,具体使用可参考:二叉堆算法实现
herr.h错误码的封装,直接借鉴学习。参考:如何优雅的定义错误码
hsocket.h对不同平台下常用socket的操作封装,例如windows下版本的socketpair

libhv loop源码分析可参考的博客:

  1. 事件的优先级机制,这里需要注意custom evetn不通过EVENT_PENDING,而是基于进程间通信socketpair实现的,即eventfd_read_cb
  2. custom事件idle事件
  3. 定时器的简单说明heartbeat和keepalive
  4. 关于hloop_run的部分细节分析可以参考:创建一个简单的TCP服务器libhv学习笔记7:IO事件之write事件
  5. libhv学习路线 之 I/O复用

关于hv如何处理tcp shor write的问题,参考hio_write

更多源码分析参考:libhv

libhv教程,个人感觉git 源码demo更合适

 类似资料: