1. 程式人生 > >使用c++簡單實現reactor模式

使用c++簡單實現reactor模式

事件驅動模型廣泛地應用於高效能的web伺服器中。而相對應的事件處理模式,最為典型的就是Reactor模式(中文可以稱作“反應器” “反應堆”等等,各種叫法都不一樣,估且就使用英文吧,叫它Reactor模式)和Proactor模式(中文也稱“主動器” “前攝器”,同前者一樣稱其為Proactor模式)。其中Reactor模式用於同步I/O,而Proactor運用於非同步I/O操作。

在各種書籍上,能夠見到的Reactor的類設計像下面這樣:


或是新增定時器,增加定時實現任務的功能,就像這樣:


本文實現一種相當簡單的Reactor,除了對於正常IO事件的處理外,它還採用了最小堆實現的定時器實現定時完成任務的功能。具體類關係設計如下(為了方便起見,我們省略了成員函式和成員變數):


考慮到連結的某個特定一方只會存在一個Reactor的特性而引入singleton模式,放棄直接使用全域性變數的方式。這裡將事件IO多路複用做成一個基類的形式,當需要時可以派生出自己所需要的IO多路複用器,比如select kqueue等等。

以下是執行結果:

Server:


Client:


ACE框架已經提供了ReactorProactor的支援,我覺得完全沒有必要重複造輪子。這裡只是為了去了解Reactor模式而簡單的實現Reactor。該實現是在wuzeshengReactor實現基礎之上的,連結如下:http://www.wuzesheng.com/?p=1624

在如下的連結中,你能夠找到更多關於Reactor

的知識。

本人享有部落格文章的版權,轉載請標明出處http://blog.csdn.net/baidu20008