ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂

一。ESFramework网络通信框架与消息处理器 

 无论是服务端还是客户端,都需要对接收到的消息进行处理,在ESFramework网络通信框架中,处理消息的组件称为消息处理器,所有的消息处理器都实现了接口IDataDealer:
   

1     public interface IDataDealer
2     {        
3         NetMessage  DealRequestMessage(NetMessage reqMsg) ;        
4     }    

   
    从DealRequestMessage方法的签名我们可以看到,将NetMessage的主体(是字节流)解析为IContract对象是由消息处理器自己完成的。这也是很符合实际的,消息处理器一定能解析并处理它关心的消息,而框架和应用的其它部分不必关心。这里小结一下,最开始我们把消息解析的任务从框架下放到了应用,这里,我们又把这个任务继续下放给了消息处理器。这样,各个消息处理器只用解析自己关心的消息了,在此基础上,我们就可以把消息处理器做成插件(Addin)的形式,并实现插件的动态加载功能。
    现在我们来看看消息处理器插件(又称“功能插件”) 
   

    /// <summary>
    /// IFunAddin 功能插件基础接口。
    /// </summary>
    public interface IFunAddin :IAddin ,IDataDealer
    {
        
    }

    

IAddin是插件的基础接口,在企业级服务器设计与实现经验之插件系统基础篇 一文中已经作了简单介绍。
     针对各种不同类型的消息(消息类型的不同体现为本条消息的Header中的ServiceKey不同),需要由不同的消息处理器来处理,管理/创建所有这些消息处理器的工厂,称为处理器工厂IDataDealerFactory。

    public interface IDataDealerFactory
    {
        IDataDealer CreateDealer(int requestType ,int serverTypeKey)  ;//serverTypeKey 比如城市代号        
    }

 

    IDataDealerFactory根据消息的类型,创建对应的处理器。CreateDealer方法中的第二个参数serverTypeKey暂时可不予关心。
    前面我们已经提到了使用插件来实现消息处理器,那么ESFramework框架就可以提供一个基于插件的处理器工厂FunAddinDealerFactory,这个工厂的实现需要借助插件管理器IAddinManagement,关于插件管理器,可参见企业级服务器设计与实现经验之插件系统基础篇一文。FunAddinDealerFactory实现如下:
   

FunAddinDealerFactory
 1     public class FunAddinDealerFactory :IDataDealerFactory
 2     {
 3         private IAddinManagement addinManagement ;
 4 
 5         public FunAddinDealerFactory()
 6         {            
 7         }
 8 
 9         #region property
10         public IAddinManagement AddinManagement
11         {
12             set
13             {
14                 this.addinManagement = value ;
15             }
16         }
17         #endregion
18 
19         #region IDataDealerFactory 成员
20         public IDataDealer CreateDealer(int requestType, int serverTypeKey)
21         {
22             foreach(IAddin addin in this.addinManagement.AddinList)
23             {
24                 if((addin.ServiceKey == requestType) && (addin.Enabled))
25                 {
26                     return (IDataDealer)addin ;
27                 }
28             }
29 
30             return null;
31         }
32 
33         #endregion
34     }

 

     上面讲述的是基于插件的处理器工厂,后面的文章中我们还会给出一个基于Tcp连接池的处理器工厂:)

    有时,应用经常有这样的需要,对某种类型的消息或某个特定的消息进行拦截、截获,然后对其进行某种变形(如压缩、加密)等,这些功能将通过Hook机制实现,Hook机制到底是如何发生作用的,请继续关注下文 

ESFramework网络通信框架介绍之(4)―消息拦截器INetMessageHook

 

上一篇:ESFramework介绍之(2)――网络通信消息NetMessage
转到  :ESFramework 可复用的(序) 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 12:13:29

ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂的相关文章

ESFramework网络通信框架介绍之(2)――网络通信消息NetMessage

ESFramework网络通信框架与元数据 较之C++而言,.NET是一个更加"动态"的平台,其动态能力建立在反射机制之上,而反射的基础是"元数据".     上文已经提到过,如果一个框架要为我们的应用做更多的事情,那么这个框架必须建立更多的标准,必须对框架自己要处理的消息有更多的了解,所以,每个消息都要是自描述的,也就是说每个消息要包含它自己的"元数据".那么,"元数据"位于消息的何处了?你一定想到了,对,是消息头(Mess

ESFramework网络通信框架介绍之(1)――网络通信消息协议接口IContract

一.ESFramework网络通信框架与字节流        通过网络通信的系统之间(如客户端与服务端的通信)要想正常交互,它们必须有"共同的语言",这种语言就是消息协议.遵守消息协议的消息才能被我们的系统所理解.    我们知道,消息在网路上传输的是字节流,而我们主流的面向对象系统中处理的却是"对象",如何将从网络上接收到的字节流转化为"对象",又如何将"对象"转化为字节流以便通过网络传递给其他系统,这便是IContract

ESFramework网络通信框架介绍之(5)――消息分派器IMessageDispatcher

  从2004年7月开始,就一直从事N层C/S架构的服务端的开发,时至今日,慢慢的积累了一些开发经验,ESFramework网络通信框架体系便是这些经验的总结.ESFramework网络通信框架这是一套完全可复用的.灵活的.单纯的.支持N层C/S架构的网络通信框架,内置了对Tcp和Udp协议的支持.ESFramework网络通信框架不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework网络通信框架框架之上,引入的一个扩展层--ESFramework网络通信框架

ESFramework网络通信框架 4.0 性能测试

  本实验用于测试ESFramework网络通信框架服务端引擎的性能,测试程序使用ESFramework 4.0版本. 一.准备工作 测试的机器总共有3台,都是普通的PC,一台作为服务器,两台作为客户端. 作为服务器是PC配置如下: 操作系统:Windows Server 2003 Enterprise Edition SP2 CPU:Pentium Dual-Core CPU E5400 @ 2.70GHz 内存:2G   二.测试策略        本实验所采用的策略是这样的: (1)每个客

ESFramework ——成熟的C#网络通信框架(跨平台)

ESFramework网络通信框架是一套性能卓越.稳定可靠.强大易用的跨平台通信框架.也是.net平台首屈一指的成熟的C#网络通信框架.从最初的单纯的C#网络通信框架,历经10年,已经发展为支持包括安卓.IOS.Xamarin等多个平台的跨平台通信框架.其支持应用服务器集群.其内置了消息的收发与自定义处理(支持同步/异步模型).消息广播.P2P通道.文件传送(支持断点续传).心跳检测.断线重连.登录验证.在线用户管理.好友与群组管理.性能诊断等功能.基于ESFramework,您可以方便快捷地开

ESFramework 通信框架安全机制的设计与实现

      在分布式通信系统中,安全无疑是非常重要的.ESFramework通信框架提供了哪些安全保障了?由于ESFramework通信框架是应用层的开发框架,那么本文我们只讨论ESFramework通信框架在应用层涉及到的安全问题.如果黑客是在网络层或链路层进行攻击,位于应用层的系统是无能为力的.从应用层来说,安全的重要性主要体现在以下几个方面:(1) 防止恶意用户使用格式不正确的消息来试探服务端.(2) 防止通信的消息被恶意用户截获,或者,即使被恶意用户截获,也无法破解其内容.(3) 防止恶

网络通信应用开发利器!—— ESPlus —— ESFramework通信框架的增强库

概述 ESPlus 是基于网络通信框架ESFramework通信框架通信框架的增强库.为了更贴近实际应用,加快网络通信系统的开发,ESPlus在ESFramework通信框架原生功能的基础上,进行了再次封装,提供了大多数通信系统中经常用到的组件和功能.在这些功能中,最主要的是:自定义信息.基础API与状态通知.文件传送.P2P框架.好友关系.组关系.Rapid引擎.  1.自定义信息 使用通信框架最基础的需求就是收发信息,ESPlus底层已经为我们封装好了所有与信息收发相关的操作,我们只要调用I

AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍

一.前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的.      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC.ORM.SOA.分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的

《Ceph源码分析》——第3章,第1节Ceph网络通信框架

第3章Ceph网络通信本章介绍Ceph网络通信模块,这是客户端和服务器通信的底层模块,用来在客户端和服务器之间接收和发送请求.其实现功能比较清晰,是一个相对较独立的模块,理解起来比较容易,所以首先介绍它. 3.1 Ceph网络通信框架一个分布式存储系统需要一个稳定的底层网络通信模块,用于各节点之间的互联互通.对于一个网络通信系统,要求如下:高性能.性能评价的两个指标:带宽和延迟.稳定可靠.数据不丢包,在网络中断时,实现重连等异常处理.网络通信模块的实现在源代码src/msg的目录下,其首先定义了