日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转载】可复用的FS

發(fā)布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】可复用的FS 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
有很多朋友要求給出一個應用ESFramework的Demo,在前面介紹ESFramework支持的4層架構中(回顧),有AS、FS、IRAS,其中FS的功能需求最簡單,所以本文就給出一個FS實現(xiàn)示例。
????
??? FS主要用于管理功能插件,并且將所有的功能性請求都轉發(fā)給對應的功能插件處理,不需要關心用戶(由AS管理)、不用關心具體的業(yè)務需求(由對應的功能插件處理),所以FS非常的單純,基本上是與應用無關的,可以在任何應用中復用同一個FS。(但是AS和IRAS就很難復用了,因為不同的應用對AS、IRAS的需求的差別可能非常大)。

????實際上,FS的實現(xiàn)自己只包含4個cs文件,絕大多數(shù)組件都由ESFramework提供了。下面是FS項目中文件的結構圖:

????其中,MainForm是主界面,FsConfiguration是FS的配置,下面馬上會講到的是FunctionServer這個FS中的核心類。

??? 我們已經知道,FS通過Tcp發(fā)布服務給AS使用,即AS通過與FS之間的Tcp連接池來使用FS提供的服務,所以會使用到ESFramework提供的ITcp組件。
??? 其次,FS需要管理所有的功能插件,所以它需要使用ESFramework提供的IAddinManagement組件。
??? 在理解了這兩點的基礎上,我們可以定義FunctionServer這個類了,它很簡單,所有方法及實現(xiàn)如下所示:
??????? 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,它用于監(jiān)控本服務器的性能狀態(tài),并將性能數(shù)據(jù)通過事件發(fā)布。如果你讀過前面的文章,你會知道,這些性能數(shù)據(jù)將被發(fā)送給AS,然后AS根據(jù)這些性能數(shù)據(jù)在多個FS上進行負載均衡調度。asRemotingServiceAccesser用于訪問AS發(fā)布的遠程服務,比如FS啟動或退出時通知AS。

??? FS核心的類FunctionServer就這些功能。你一定非常想知道,ITcp、ITcpStreamDispatcher等是如何與FunctionServer裝配起來的,謎底馬上揭曉。相對于使用4個cs文件就實現(xiàn)了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上的客戶端實現(xiàn)。
????下面是FS運行時的截圖:


??? 下載FS源碼?(VS2003)。
????

總結

以上是生活随笔為你收集整理的【转载】可复用的FS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。