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

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.hhplatform.h两个头文件中提供的平台宏、编译器宏等实现的;
  • event模块则实现了事件循环(包括IO、timer、idle),不同的平台有不同的实现,如Linux使用epollWindows使用IOCPMac使用kqueueSolaris使用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模块实现更多的常见应用层协议,如websocketMQTTredis等;
也欢迎更多的志同道合者基于libhv提供的基础设施贡献更多的实用代码,完善libhv的网络协议生态。

更多参考资料

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐