设计模式--reactor(2)
原文:http://blog.csdn.net/sparkliang/article/details/4957744 前面讲到,整个libevent本身就是一个Reactor,因此本节将专门对Reactor模式进行必要的介绍,并列出libevnet中的几个重要组件和Reactor的对应关系,在后面的章节中可能还会提到本节介绍的基本概念。 1 Reactor的事件处理机制 首先来回想一下普通函数调用的机制:程序调用某函数?函数执行,程序等待?函数将结果和控制权返回给程序?程序继续处理。 2 Reactor模式的优点 Reactor模式是编写高性能网络服务器的必备技术之一,它具有如下的优点: 3 Reactor模式框架 使用Reactor模型,必备的几个组件:事件源、Reactor框架、多路复用机制和事件处理程序,先来看看Reactor模型的整体框架,接下来再对每个组件做逐一说明。 class Reactor { public: int register_handler(Event_Handler *pHandler,int event); int remove_handler(Event_Handler *pHandler,int event); void handle_events(timeval *ptv); // ... };4) Event Handler——事件处理程序 事件处理程序提供了一组接口,每个接口对应了一种类型的事件,供Reactor在相应的事件发生时调用,执行相应的事件处理。通常它会绑定一个有效的句柄。 对应到libevent中,就是event结构体。 下面是两种典型的Event Handler类声明方式,二者互有优缺点。
class Event_Handler { public: virtual void handle_read() = 0; virtual void handle_write() = 0; virtual void handle_timeout() = 0; virtual void handle_close() = 0; virtual HANDLE get_handle() = 0; // ... }; class Event_Handler { public: // events maybe read/write/timeout/close .etc virtual void handle_events(int events) = 0; virtual HANDLE get_handle() = 0; // ... }; 4 Reactor事件处理流程 前面说过Reactor将事件流“逆置”了,那么使用Reactor模式后,事件控制流是什么样子呢? 5 小结上面讲到了Reactor的基本概念、框架和处理流程,对Reactor有个基本清晰的了解后,再来对比看libevent就会更容易理解了,接下来就正式进入到libevent的代码世界了,加油! 参考资料: Pattern-Oriented Software Architecture,Patterns for Concurrent and Networked Objects,Volume 2 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |