【转载】可复用的FS
生活随笔
收集整理的這篇文章主要介紹了
【转载】可复用的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)。
????
????
??? 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)。
????
總結
以上是生活随笔為你收集整理的【转载】可复用的FS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类算法学习指南(二)
- 下一篇: 欢迎与我一起交流安全管理平台