Libevent学习-----Reactor的事件处理机制
2017-06-06 16:18
253 查看
1. 普通函数的调用机制:
主程序调用某函数à函数执行,保存入参和返回寄存器地址,主程序等待à 函数处理完将结果和控制权返回给主程序 à主程序继续执行
2. Reactor, 中文的意思是“反应堆”, 是一种事件驱动机制。
应用程序不是主动调用某个函数完成处理,而是将函数以回调函数的方式注册到Reactor上,如果相应的事件发生了,Reactor将主动调用注册的函数。
3. Reactor模式整体框架
1) Reactor----反应堆
Reactor是事件管理的接口,将事件注册到事件多路分发器上,然后在事件多路分发器上等待事件的发生,当有事件发生时,调用注册的事件回调函数处理事件。
2) eventdemultiplexer ----事件多路分发器
是一个函数,用来等待一个或多个事件的发生。调用者会被阻塞,直到分发器上有事件发生。一般是I/O多路复用机制,比如select,poll和epoll等。
3) Handle------(事件源)
用于识别每一个事件,如socket描述符、文件描述符、信号等
4) EventHandler-----事件处理程序
事件处理程序提供了一组接口,每一个接口对应一种类型的事件
5) ConcreteEvent Handler-----具体的事件处理器
这个是Event Handler接口的具体实现。每一个具体的事件处理器通常和一个描述符相关。
Libevent对应的实现
1) Reactor反应堆
Libevent里面的反应堆,对应的是Struct event_base 结构
2)eventdemultiplexer ----事件多路分发器
3)Handle------(事件源)
struct event {
……
evutil_socket_t ev_fd; ------------------对应的事件
……
};
4) Event Handler-----事件处理程序
4) ConcreteEvent Handler-----具体的事件处理器
event_new(struct event_base *base,evutil_socket_t fd, short events, void (*cb)(evutil_socket_t, short, void *),void *arg)
调用event_new时候添加的回调函数cb
Event_new函数完成了
1、event结构的内存分配;
2、设置可所属的event_base;
3、初始化了event结构;
4、设置了fd,events,cb和arg等参数
Libevent整体处理流程:
1)首先调用struct event_base *base = event_base_new(); 创建一个反应堆
2) 调用event_new产生event结构,并将handler(fd)和具体事件处理器cb放入event结构中,完成Handler和事件处理器的赋值,并且将event与event_base相关联
3)调用event_add将event注册到事件多路分发器eventdemultiplexer
4)调用event_base_dispatch,等待事件多路分发器返回激活事件,然后调用对应事件的事件处理函数
主程序调用某函数à函数执行,保存入参和返回寄存器地址,主程序等待à 函数处理完将结果和控制权返回给主程序 à主程序继续执行
void func () { return; } int main(int argc, char *argv[]) { int a,b; func(); -------主程序调用func函数时,必须等待func执行完以后才能继续执行后续的代码 a = 1; b = 2; }
2. Reactor, 中文的意思是“反应堆”, 是一种事件驱动机制。
应用程序不是主动调用某个函数完成处理,而是将函数以回调函数的方式注册到Reactor上,如果相应的事件发生了,Reactor将主动调用注册的函数。
3. Reactor模式整体框架
1) Reactor----反应堆
Reactor是事件管理的接口,将事件注册到事件多路分发器上,然后在事件多路分发器上等待事件的发生,当有事件发生时,调用注册的事件回调函数处理事件。
2) eventdemultiplexer ----事件多路分发器
是一个函数,用来等待一个或多个事件的发生。调用者会被阻塞,直到分发器上有事件发生。一般是I/O多路复用机制,比如select,poll和epoll等。
3) Handle------(事件源)
用于识别每一个事件,如socket描述符、文件描述符、信号等
4) EventHandler-----事件处理程序
事件处理程序提供了一组接口,每一个接口对应一种类型的事件
5) ConcreteEvent Handler-----具体的事件处理器
这个是Event Handler接口的具体实现。每一个具体的事件处理器通常和一个描述符相关。
Libevent对应的实现
1) Reactor反应堆
Libevent里面的反应堆,对应的是Struct event_base 结构
2)eventdemultiplexer ----事件多路分发器
struct event_base { const struct eventop *evsel; ---------对应io的事件多路分发器—epoll …… const struct eventop *evsigsel; --------对应信号的事件多路分发器 evsigops …… };
3)Handle------(事件源)
struct event {
……
evutil_socket_t ev_fd; ------------------对应的事件
……
};
4) Event Handler-----事件处理程序
struct event { …… void (*ev_callback)(evutil_socket_t, short, void *arg);----- 事件处理程序 …… }
4) ConcreteEvent Handler-----具体的事件处理器
event_new(struct event_base *base,evutil_socket_t fd, short events, void (*cb)(evutil_socket_t, short, void *),void *arg)
调用event_new时候添加的回调函数cb
Event_new函数完成了
1、event结构的内存分配;
2、设置可所属的event_base;
3、初始化了event结构;
4、设置了fd,events,cb和arg等参数
Libevent整体处理流程:
1)首先调用struct event_base *base = event_base_new(); 创建一个反应堆
2) 调用event_new产生event结构,并将handler(fd)和具体事件处理器cb放入event结构中,完成Handler和事件处理器的赋值,并且将event与event_base相关联
3)调用event_add将event注册到事件多路分发器eventdemultiplexer
4)调用event_base_dispatch,等待事件多路分发器返回激活事件,然后调用对应事件的事件处理函数
相关文章推荐
- Libevent学习之处理可读 and 可写事件
- android源码学习-事件分发处理机制
- ExtJS学习05事件处理机制
- Reactor的事件处理机制
- android学习之基础一android事件处理机制
- 菜鸟学习Cocos2d-x 3.x——浅谈事件处理机制
- SODBASE CEP学习(七):Fail retry机制、去重只执行一次机制、事件乱序处理机制
- Chromium网页输入事件处理机制简要介绍和学习计划
- 【Cocos2d-X开发学习笔记】第22期:事件处理机制之触屏事件
- 【Cocos2d-X开发学习笔记】第24期:事件处理机制之加速度传感器事件
- 【Linux 开发】Libevent事件处理机制及实例
- 【Linux 开发】Libevent事件处理机制及实例
- 小菜学习安卓---安卓事件处理之回调机制
- 【Cocos2d-X开发学习笔记】第22期:事件处理机制之触屏事件
- ABAP--关于SAP的Control Framework的系统事件ABAP处理机制的学习
- Libevent之事件处理框架-event_base结构体学习
- AWT事件处理机制学习
- 事件处理机制的初步学习
- View机制深入学习(五) 事件处理机制一
- AWT事件处理机制学习