纪念libhv上github trending
·
2020年11月15日,libhv上了github trending c语言榜第一名。特作此文以纪念。

libhv为何物
libhv是一个类似于libevent、libev、libuv的跨平台网络库,提供了更简单的接口和更丰富的协议。详细介绍见项目README
项目地址:https://github.com/ithewei/libhv.git
码云镜像:https://gitee.com/ithewei/libhv.git
QQ技术交流群:739352073
libhv博客专栏:https://hewei.blog.csdn.net/category_9866493.html
libhv源码分析:https://blog.csdn.net/qu1993/category_10637982.html
libhv发展历程
- libhv自2018年8月28日
first commit到github,起初只是一些c/c++跨平台基础设施,如日期时间、字符串、线程同步锁、日志、缓存等,即现在的base模块。 - 至今已开发维护2年多,四百多次
commit,实用在网络通讯、IoT、http等领域,正确性、稳定性、可扩展性、性能都有保证,完全开源,请放心使用。 - 期间发展了event事件循环模块和http模块,在libhv中你可以发现
libevent、libev、libuv、nginx、ehttp、libuhttp、gin等众多网络开源库的影子,libhv正是参考借鉴它们的精华之处,提供了一套更简单的API接口。阅读以上开源库有困难的同学不妨试试阅读libhv,我一直觉得libhv的学习价值可能超过实用价值。
libhv的定位
精妙小巧跨平台,简单实用易上手
- base封装了很多跨平台的代码,如
hatomic原子操作、hthread线程、hmutex线程同步,当然这都是基于configure/cmake自动生成的hconfig.h和hplatform.h两个头文件中提供的平台宏、编译器宏等实现的; - event模块则实现了事件循环(包括
IO、timer、idle),不同的平台有不同的实现,如Linux使用epoll,Windows使用IOCP、Mac使用kqueue、Solaris使用evport,感兴趣的可以读一读event下的源码; - http模块则基于event模块实现了本世纪最为通用的应用层协议http协议,包括http服务端和客户端,libhv中examples下提供的
httpd,性能可媲美nginx服务; - 不妨勇敢的说,libhv是c++编写HTTP API服务端/客户端最简单的库,没有之一
libhv和libevent、libev、libuv有什么不同
- libevent最为古老、有历史包袱,bufferevent虽为精妙,却也难以上手;
- libev可以说是libevent的简化版,代码极为精简,但宏定义用的过多,代码可读性不强,且在Windows上实现不佳;
- libuv是nodejs的c底层库,最先也是由libevent+对Windows IOCP支持,后来才改写自成一体,同时实现了管道、文件的异步读写,很强大,但结构体比较多,封装比较深;
- libhv本身是参考了libevent、libev、libuv的实现思路,它们的核心都是事件循环(即在一个事件循环中处理IO、定时器等事件),但提供的接口最为精简,API接近原生系统调用,最容易上手;
- 具体这几个库的写法比较见https://github.com/ithewei/libhv/tree/master/echo-servers
- 当然这几个库的性能是接近的,都将非阻塞IO多路复用用到了极致
- 更详细介绍见国产开源库libhv为何能被awesome-c和awesome-cpp收录
libhv后续规划
基于event模块实现更多的常见应用层协议,如websocket、MQTT、redis等;
也欢迎更多的志同道合者基于libhv提供的基础设施贡献更多的实用代码,完善libhv的网络协议生态。
更多参考资料
更多推荐
所有评论(0)