一、接触libevent
libevent是用C语言编写的开源高性能网络库,是学习网络编程、后台开发必备的源码学习资料。其源代码相当精炼、易读,设计技巧和技术框架也很精彩,所以在此我也将我的理解与思考与大家分享,后期我自己也模仿实现了C++版本的网络库,欢迎一起来讨论。
二、libevent特点
-高性能,体现在使用了事件驱动的设计模式,即Reactor模型。
-跨平台,支持目前几乎所有操作系统。
-支持多种I/O多路复用技术epoll、poll、select、kqueue等,并在此基础上进行封装,提供统一接口。
-将I/O、定时器、信号三者事件集成统一。
三、Reactor模式
提到网络编程,不得不提主流的也是使用最广泛的Reactor设计模式(另一个是Preactor模式),那么什么是Reactor,翻译过来是“反应堆”,它不同于传统的顺序执行逻辑,而是运用了回调函数的技术,应用程序将相应的接口注册到Reactor上,如果有相应的事件发生,Reactor将主动调用应用程序注册的接口来实现功能。举个例子:用手机订外卖,订完可以干其他事,外卖好了自然有骑手送上门,也就意味着可以开吃了,而不用去一遍遍去咨询商家外卖是否做好。如下图是Reactor模型的架构图。
其中,Reactor作为所有事件的管理组件,支持事件的注册与注销,内部通过调用操作系统的I/O多路复用技术进行事件循环,当有事件到达时,调用相应的Event Handler。