- 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源码分析可参考的博客:
- 事件的优先级机制,
custom evetn
属于IO事件 - custom事件,idle事件
- 定时器的简单说明,heartbeat和keepalive
- 关于
hloop_run
的部分细节分析可以参考:创建一个简单的TCP服务器,libhv学习笔记7:IO事件之write事件 - libhv学习路线 之 I/O复用
关于hv如何处理tcp shor write的问题,参考hio_write
更多源码分析参考:libhv
libhv教程,个人感觉git 源码demo更合适