使用c++简单实现reactor模式
2014-11-22 09:29
260 查看
事件驱动模型广泛地应用于高性能的web服务器中。而相对应的事件处理模式,最为典型的就是Reactor模式(中文可以称作“反应器” “反应堆”等等,各种叫法都不一样,估且就使用英文吧,叫它Reactor模式)和Proactor模式(中文也称“主动器” “前摄器”,同前者一样称其为Proactor模式)。其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。
在各种书籍上,能够见到的Reactor的类设计像下面这样:
![](http://img.my.csdn.net/uploads/201411/22/1416619196_5096.png)
或是添加定时器,增加定时实现任务的功能,就像这样:
![](http://img.my.csdn.net/uploads/201411/22/1416619196_3045.png)
本文实现一种相当简单的Reactor,除了对于正常IO事件的处理外,它还采用了最小堆实现的定时器实现定时完成任务的功能。具体类关系设计如下(为了方便起见,我们省略了成员函数和成员变量):
![](http://img.my.csdn.net/uploads/201411/22/1416619195_2170.png)
源码链接:https://github.com/song0071000/Reactor_Implemention 欢迎fork and pull request
考虑到链接的某个特定一方只会存在一个Reactor的特性而引入singleton模式,放弃直接使用全局变量的方式。这里将事件IO多路复用做成一个基类的形式,当需要时可以派生出自己所需要的IO多路复用器,比如select
kqueue等等。
以下是运行结果:
Server:
![](http://img.my.csdn.net/uploads/201411/22/1416619196_9903.png)
Client:
![](http://img.my.csdn.net/uploads/201411/22/1416619195_1414.png)
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
在各种书籍上,能够见到的Reactor的类设计像下面这样:
![](http://img.my.csdn.net/uploads/201411/22/1416619196_5096.png)
或是添加定时器,增加定时实现任务的功能,就像这样:
![](http://img.my.csdn.net/uploads/201411/22/1416619196_3045.png)
本文实现一种相当简单的Reactor,除了对于正常IO事件的处理外,它还采用了最小堆实现的定时器实现定时完成任务的功能。具体类关系设计如下(为了方便起见,我们省略了成员函数和成员变量):
![](http://img.my.csdn.net/uploads/201411/22/1416619195_2170.png)
源码链接:https://github.com/song0071000/Reactor_Implemention 欢迎fork and pull request
考虑到链接的某个特定一方只会存在一个Reactor的特性而引入singleton模式,放弃直接使用全局变量的方式。这里将事件IO多路复用做成一个基类的形式,当需要时可以派生出自己所需要的IO多路复用器,比如select
kqueue等等。
以下是运行结果:
Server:
![](http://img.my.csdn.net/uploads/201411/22/1416619196_9903.png)
Client:
![](http://img.my.csdn.net/uploads/201411/22/1416619195_1414.png)
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
相关文章推荐
- 使用c++简单实现reactor模式
- C++ 使用模版范式写一个单例模式的类--简单实现单例模式
- C++ 使用模版范式写一个单例模式的类--简单实现单例模式
- 大话设计模式之C++实现---简单工厂模式
- Groovy探索之MOP 十六 使用Interceptor实现简单的观察家模式
- C++单例模式的简单实现
- 使用命令模式实现简单的支持撤销的计算器
- 设计模式之简单工厂模式:c++实现
- 简单工厂模式 C++实现
- C++实现简单工厂模式
- 使用C++实现设计模式(连载): 第二回 Factory 工厂模式
- C++ 使用模板 实现单例模式
- C++使用模板实现简单的singleton
- 使用C++实现简单线程池v1.0
- 设计模式之简单工厂C++实现
- 使用C++实现设计模式(连载): 第一回 Singleton 单例模式
- 自己写的用c++实现的简单装饰者模式
- 友元函数的简单使用(C++实现)
- (C++)设计模式------单例模式 singleton(简单的实现和对象释放的控制) -- 创建型模式
- 有趣的Java - 简单使用enum实现策略模式Strategy