您的位置:首页 > Web前端 > React

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

2014-11-22 09:29 260 查看
事件驱动模型广泛地应用于高性能的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框架已经提供了Reactor和Proactor的支持,我觉得完全没有必要重复造轮子。这里只是为了去了解Reactor模式而简单的实现Reactor。该实现是在wuzesheng的Reactor实现基础之上的,链接如下: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: