使用c++简单实现reactor模式

来源:互联网 发布:子域名备案 编辑:程序博客网 时间:2024/06/05 05:52

转载地址:http://blog.csdn.net/baidu20008/article/details/41378761

事件驱动模型广泛地应用于高性能的web服务器中。而相对应的事件处理模式,最为典型的就是Reactor模式(中文可以称作“反应器” “反应堆”等等,各种叫法都不一样,估且就使用英文吧,叫它Reactor模式)和Proactor模式(中文也称“主动器” “前摄器”,同前者一样称其为Proactor模式)。其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。

在各种书籍上,能够见到的Reactor的类设计像下面这样:


或是添加定时器,增加定时实现任务的功能,就像这样:


本文实现一种相当简单的Reactor,除了对于正常IO事件的处理外,它还采用了最小堆实现的定时器实现定时完成任务的功能。具体类关系设计如下(为了方便起见,我们省略了成员函数和成员变量):


源码链接:https://github.com/song0071000/Reactor_Implemention 欢迎fork and pull request

 

考虑到链接的某个特定一方只会存在一个Reactor的特性而引入singleton模式,放弃直接使用全局变量的方式。这里将事件IO多路复用做成一个基类的形式,当需要时可以派生出自己所需要的IO多路复用器,比如select kqueue等等。

以下是运行结果:

Server:


Client:


ACE框架已经提供了ReactorProactor的支持,我觉得完全没有必要重复造轮子。这里只是为了去了解Reactor模式而简单的实现Reactor。该实现是在wuzeshengReactor实现基础之上的,链接如下:http://www.wuzesheng.com/?p=1624

    在如下的链接中,你能够找到更多关于Reactor的知识。

http://taohui.org.cn/tcpperf6.html

http://my.oschina.net/JJREN/blog/51966

本人享有博客文章的版权,转载请标明出处http://blog.csdn.net/baidu20008
0 0