ESFramework应用示例--可复用的FS

    有很多朋友要求给出一个应用ESFramework的Demo,在前面介绍ESFramework支持的4层架构中(回顾),有AS、FS、IRAS,其中FS的功能需求最简单,所以本文就给出一个FS实现示例。
    
    FS主要用于管理功能插件,并且将所有的功能性请求都转发给对应的功能插件处理,不需要关心用户(由AS管理)、不用关心具体的业务需求(由对应的功能插件处理),所以FS非常的单纯,基本上是与应用无关的,可以在任何应用中复用同一个FS。(但是AS和IRAS就很难复用了,因为不同的应用对AS、IRAS的需求的差别可能非常大)。

    实际上,FS的实现自己只包含4个cs文件,绝大多数组件都由ESFramework提供了。下面是FS项目中文件的结构图:

    其中,MainForm是主界面,FsConfiguration是FS的配置,下面马上会讲到的是FunctionServer这个FS中的核心类。

    我们已经知道,FS通过Tcp发布服务给AS使用,即AS通过与FS之间的Tcp连接池来使用FS提供的服务,所以会使用到ESFramework提供的ITcp组件。
    其次,FS需要管理所有的功能插件,所以它需要使用ESFramework提供的IAddinManagement组件。
    在理解了这两点的基础上,我们可以定义FunctionServer这个类了,它很简单,所有方法及实现如下所示:
        public   void  LoadAddins()
        {
            
string  directory  =  System.IO.Directory.GetParent(System.Windows.Forms.Application.ExecutablePath).FullName ;
            
this .addinManagement.LoadAllAddins(directory , true ) ;
        }

        
public   void  Start()
        {
            
this .agileTcp.Start() ;
            
this .serverPerformanceMonitor.Start() ;
            
this .asRemotingServiceAccesser.FsStarted() ;
        }

        
public   void  Stop()
        {
            
this .agileTcp.Stop() ;
            
this .serverPerformanceMonitor.Stop() ;
            
this .asRemotingServiceAccesser.FsToExit() ;
        }

        
public   void  ReadyToExit()
        {
            
this .Stop() ;        
            
this .agileTcp.Dispose() ;                
        }
    
       各个方法的含义和成员变量的含义相信大家已经非常的明白了,由必要解释一下serverPerformanceMonitor,它用于监控本服务器的性能状态,并将性能数据通过事件发布。如果你读过前面的文章,你会知道,这些性能数据将被发送给AS,然后AS根据这些性能数据在多个FS上进行负载均衡调度。asRemotingServiceAccesser用于访问AS发布的远程服务,比如FS启动或退出时通知AS。

    FS核心的类FunctionServer就这些功能。你一定非常想知道,ITcp、ITcpStreamDispatcher等是如何与FunctionServer装配起来的,谜底马上揭晓。相对于使用4个cs文件就实现了FS来说,FS的组件装配就稍微复杂些(AS则更复杂)。我采用SPring.NET来完成组件装配。
    我们先看ITcp组件的装配:
        < object  name = " agileTcp "  type = " ESFramework.Network.Tcp.AgileTcp ,ESFramework "  init - method = " Initialize " >
                
< property name = " Port " >
                    
< object  type = " Spring.Objects.Factory.Config.PropertyRetrievingFactoryObject ,Spring.Core " >
                        
< property name = " TargetObject "   ref = " fsConfiguration " />
                        
< property name = " TargetProperty "  value = " TcpPort " />
                    
</ object >
                
</ property >     
                
< property name = " MaxMessageSize "  value = " 2000000 " />
                
< property name = " Dispatcher "   ref = " tcpStreamDispatcher " />
                
< property name = " ContractHelper "   ref = " contractHelper " />
                
< property name = " BufferPool " >
                    
< object  type = " ESFramework.Network.Tcp.SimpleBufferPool ,ESFramework " />
                
</ property >
           
</ object >     

    如果你研究过AgileTcp组件,上面的配置非常容易理解,最主要的,AgileTcp使用的分派器组件,分配器组件的装配如下:
        < object  name = " tcpStreamDispatcher "  type = " ESFramework.Network.Tcp.TcpStreamDispatcher ,ESFramework " >                 
                
< property name = " ContractHelper "   ref = " contractHelper " />
                
< property name = " TcpClientsController "   ref = " agileTcp " />             
                
< property name = " RequestDealerFactory " >
                    
< object  type = " ESFramework.Network.FunAddinDealerFactory ,ESFramework " >
                        
< property name = " AddinManagement "   ref = " addinManagement " />
                    
</ object >
                
</ property >     
           
</ object >
    
    非常需要说明一点的是,消息分派器使用的处理器工厂是ESFramework.Network.FunAddinDealerFactory,因为它只需要处理功能请求,并且这些功能请求是由功能插件处理的,所以使用ESFramework.Network.FunAddinDealerFactory就可以了,而不需要使用功能全面的EsbRequestDealerFactory,EsbRequestDealerFactory通常由AS使用。

    最后一个重要组件的装配--FunctionServer:
            < object  name = " functionServer "  type = " FunctionServerSystem.Server.FunctionServer ,FunctionServerSystem " >
                
< property name = " AgileTcp "   ref = " agileTcp " />         
                
< property name = " AddinManagement "   ref = " addinManagement " />
                
< property name = " ServerPerformanceMonitor "   ref = " serverPerformanceMonitor " />
                
< property name = " AsRemotingServiceAccesser "   ref = " asRemotingServiceAccesser " />
            
</ object >

    毫无秘密可言!

    还有就是主界面MainForm的装配,就不罗列了,大家看源码就知道了。这是FS的一个例子,如果你需要看到客户端的例子,AgileIM的源码是一个选择,不过AgileIM稍微复杂了些,过段时间我会给出一个简单的建立在ESFramework上的客户端实现。
    下面是FS运行时的截图:


    下载FS源码 (VS2003)。
    
 转到  :ESFramework 可复用的通信框架(序) 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
消息部分:<br>1.ESFramework介绍之(1)――网络通信消息协议接口IContract<br><br>2.ESFramework介绍之(2)――网络通信消息NetMessage<br> <br>3.ESFramework介绍之(3)――消息处理器和处理器工厂<br><br>4.ESFramework介绍之(4)――消息拦截器INetMessageHook <br><br>5.ESFramework介绍之(5)――消息分派器IMessageDispatcher<br><br>6.ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy <br><br>7.ESFramework介绍之(31)―― 消息分类及对应的处理器 <br><br><br>通信基础设施(Tcp、Udp)<br>1.ESFramework介绍之(21)-- Tcp组件接口ITcp介绍 <br><br>2.ESFramework介绍之(23)―― AgileTcp <br><br>3.ESFramework介绍之(28)―― Udp组件<br><br><br>基于C/S的4层架构:<br>1.ESFramework介绍之(6)―― 基于C/S的4层架构概述 <br><br>2.ESFramework介绍之(10)-- Tcp连接池<br><br>3.ESFramework介绍之(11)-- Tcp连接池管理器<br><br>4.ESFramework介绍之(12)―― 基于Tcp连接池的消息处理器 <br><br>5.ESFramework介绍之(13)-- 功能插件处理器工厂<br><br>6.ESFramework介绍之(14)-- AS与FS通信方案 <br><br>7.ESFramework介绍之(15)-- IRAS<br><br>8.ESFramework介绍之(17)―― 支持漫游用户和跨区域功能请求 <br><br>9.ESFramework介绍之(18)―― Tcp用户管理器组件 <br><br>10.ESFramework介绍之(19)―― 对动态组ActiveGroup的支持 <br><br>11.ESFramework介绍之(24)―― 日志记录IEsbLogger <br><br>12.ESFramework介绍之(26)-- 支持复杂插件(InnerDealer 和 InnerDispatcher) <br><br>13.ESFramework介绍之(27)-- 支持OverdueMessage <br><br>14.ESFramework介绍之(29)―― 插件公共设施 AddinUtil <br><br>15.ESFramework介绍之(33)―― AS与FS通信实现及相关 <br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值