欢迎大家来到IT世界,在知识的湖畔探索吧!
2020年11月15日,libhv上了github trending c语言榜第一名。特作此文以纪念。
欢迎大家来到IT世界,在知识的湖畔探索吧!
文章目录
- libhv为何物
- libhv发展历程
- libhv的定位
- libhv和libevent、libev、libuv有什么不同
- libhv后续规划
- 更多参考资料
libhv为何物
libhv是一个类似于libevent、libev、libuv的跨平台网络库,提供了更简单的接口和更丰富的协议。详细介绍见项目README
项目地址:https://github.com/ithewei/libhv.git
libhv发展历程
- libhv自2018年8月28日first commit到github,起初只是一些c/c++跨平台基础设施,如日期时间、字符串、线程同步锁、日志、缓存等,即现在的base模块。
- 至今已开发维护2年多,四百多次commit,实用在网络通讯、IoT、http等领域,正确性、稳定性、可扩展性、性能都有保证,完全开源,请放心使用。
- 期间发展了event事件循环模块和http模块,在libhv中你可以发现libevent、libev、libuv、nginx、ehttp、libuhttp、ginex等众多网络开源库的影子,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服务;
- 不妨勇敢的说
c++编写HTTP API服务端/客户端最简单的库,没有之一hewei.blog.csdn.net
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收录_HW的博客-CSDN博客_libhvhewei.blog.csdn.net
libhv后续规划
基于event模块实现更多的常见应用层协议,如websocket、MQTT、redis等;
也欢迎更多的志同道合者基于libhv提供的基础设施贡献更多的实用代码,完善libhv的网络协议生态。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/103363.html