zoukankan      html  css  js  c++  java
  • ESFramework介绍之(12)―― 基于Tcp连接池的消息处理器

        前面的两篇文章我们已经介绍了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”,这将在下文中介绍。 

    感谢关注!

     上一篇:ESFramework介绍之(11)-- Tcp连接池管理器
     下一篇:ESFramework介绍之(13)-- 功能插件处理器工厂
     
     转到  :ESFramework 可复用的通信框架(序) 

     

  • 相关阅读:
    hdu 5877 (dfs+树状数组) Weak Pair
    hdu 5876 (补图BFS) Sparse Graph
    bzoj 1051 (强连通) 受欢迎的牛
    UVA 10054 (欧拉回路) The Necklace
    HYSBZ 2743 (树状数组) 采花
    Codeforces 702C Cellular Network
    ZAB协议(Zookeeper atomic Broadcast)
    分布式一致性协议-2PC与3PC(二)
    分布式架构(一)
    redis集群
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/351925.html
Copyright © 2011-2022 走看看