twzheng's cppblog

『站在风口浪尖紧握住鼠标旋转!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  136 随笔 :: 78 文章 :: 353 评论 :: 0 Trackbacks
[源] http://zhuweisky.cnblogs.com/archive/2006/03/17/351925.html

前面的两篇文章我们已经介绍了Tcp连接池和Tcp连接池管理器,并且引入了ITcpPool接口,这个接口可以将单个连接池和一组连接池统一起来,使它们有相同的外部使用方式。现在我们需要考虑的问题是,当消息分派器分派一个接收到的请求时,如果这个请求需要被FS上的某个功能插件处理,那么消息分派器是如何将这个消息分派到对应的FS上去的? 

    回顾介绍消息分派器时画出的各消息组件联系图,我们非常自然的想到,创建一个消息处理器,这个消息处理器将请求消息通过Tcp连接池转发给对应FS处理。这样的一个消息处理器称为“基于Tcp连接池的消息处理器”,它在消息组件联系图中的位置如下:
  
    当有一个请求被分派到基于连接池的消息处理器时,它就从Tcp连接池中Rent一个NetworkStream,然后发送请求,并将接收到的回复返回给消息分派器。基于连接池的消息处理器仍然实现了IDataDealer接口,其借助ITcpPool组件来实现功能。下面给出简单伪码,因为整个实现比较复杂(错误处理、异常处理、ReRent机制等),代码比较多,所以就不列出来了,大家只要了解了主要的思想就行了,而这个思想是比较简单的。
       public NetMessage DealRequestMessage(NetMessage reqMsg)
        {
            
/*
             1.Rent TcpStream
             2.Send Request
             3.Recieve Response
             4.Return Response
             
*/ 
        }

    最后提一句,我们在上图的AS和FS中都看到了网络组件,如果AS也采用Tcp,那么这两个组件是相同的,也就是说Tcp组件可以很方便的复用。 
   
    在FS中,Tcp网络组件和功能插件之间是通过虚线连接起来的,也就是说网络组件并不会直接与功能插件交互,它们之间仍然存在这一个纽带,这就是消息处理器工厂,那么用于管理功能插件的工厂,就叫做“功能插件处理器工厂FunAddinDealerFactory”,这将在下文中介绍。 

感谢关注!

posted on 2007-04-14 22:38 谭文政 阅读(334) 评论(0)  编辑 收藏 引用 所属分类: ESFramework

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理