事件处理模式之Reactor(二)
本文是上一篇《事件处理模式之Reactor(一)》的下一篇,上一篇主要介绍了reactor模式的基本理论,这一篇主要通过实例,来介绍Reactor模式的具体使用。在开始本文之前,有必要再说明一下,reactor的源码的地址:reactor源码, 感兴趣的读者朋友可以自己用svn客户端check out到本地。
如左图所示为reactor项目的基本结构,整体项目分为三个部分:
服务端和客户端之间通过telnet协议进行交互,目前仅支持time和exit两个命令,客户向服务端发送time命令,服务端返回当前时间;客户端向服务端发送exit命令,服务端断开客户端连接。如果要实现其它命令,可以直接通过扩展相关处理逻辑来实现。这里我们关注的重点是reactor模式,因此不在支持的命令方面做过多的扩展,感兴趣的朋友可以自己进行扩展。
下面我们来看一下server的实现,从代码中可以看出,server主要包括两个类:
点这里查看服务端源码:reactor_server_test.cc
接下来,我们来看一下client的实现,从代码中可以看出,client主要包括一个类:
点这里查看客户端源码:reactor_client_test.cc
通过上面的介绍,以及相关源代码的学习,相信读者朋友对reactor模式的使用有了个初步的印象,下面来总结一下使用reactor的基本步骤,希望能够对用到的朋友有所帮助。总的来说,要使用reactor模式来实现一个网络server/client包括以下几个步骤:
编译命令:
g++ -shared event_demultiplexer.cc event_demultiplexer.h reactor.cc reactor.h -fPIC -o libreactor.so
g++ reactor_server_test.cc test_common.h -o reactor_server -L. libreactor.so
g++ reactor_client_test.cc test_common.h -o reactor_client -L. libreactor.so
您好,有幸拜读您的文章,让我获益匪浅。有点遗憾的是目前代码下不下来,不能更详细的学习一下。