日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

ESFramework介紹之(33)―― AS與FS通信實現(xiàn)及

系統(tǒng) 1773 0
(本文部分內(nèi)容只適合ESFramework V0.3+)

ESFramework介紹之(14)-- AS與FS通信方案 一文中,我們講到了AS與FS之間基本的通信方案,并且采取了一些策略來保證AS與FS之間的穩(wěn)定通信。本文我們將給出AS與FS通信的兩種實現(xiàn),即基于Tcp連接池的通信實現(xiàn)和基于Remoting的通信實現(xiàn)。

我們已經(jīng)知道,AS與FS之間的通信分為兩類,一類是非功能通信,一類是功能通信。非功能通信指的是FS向AS注冊、注銷等通信,這種通信僅僅是FS主動聯(lián)系A(chǔ)S,以表明FS自己的狀態(tài)。功能通信是指AS將功能請求轉(zhuǎn)發(fā)給FS處理,這可以通過Tcp連接池或Remoting的方式進行。在 ESFramework介紹之(14)-- AS與FS通信方案 一文中,我們主要描述了非功能通信的策略,這里我們將描述功能通信的兩種實現(xiàn)。

要能比較全面的說清楚AS與FS之間的功能通信,我不得不從一個更大的視野來討論問題,其中會涉及到對眾多FS的管理、調(diào)度、狀態(tài)顯示等問題。讓我們先從基于Tcp連接池的通信開始。先給出個與該實現(xiàn)相關(guān)的組件關(guān)系圖先:
ESFramework介紹之(33)―― AS與FS通信實現(xiàn)及相關(guān)
我來解釋一下各個組件的作用、職責(zé),以及它們之間的關(guān)系。
(1)IAsRemotingService_4Fs,AS通過該接口發(fā)布遠程服務(wù)給FS,F(xiàn)S可以通過該接口來向AS表明自己的狀態(tài),如注冊、啟動、停止、注銷、發(fā)布FS自己的性能數(shù)據(jù)等。
(2)IFsManager ,該組件實現(xiàn)了IAsRemotingService_4Fs接口,它對所有在線的FS進行管理和狀態(tài)監(jiān)控。IFsManager 實現(xiàn)了IServerScheduler接口,它能夠在多個FS之間進行調(diào)度,從而實現(xiàn)負載均衡。因為IFsManager 知道每個FS的實時性能數(shù)據(jù),所以它可以做到這一點。
(3)IFsDisplayer ,用于在UI上顯示每個FS的相關(guān)數(shù)據(jù),比如FS的編號、FS的名稱、FS的服務(wù)列表、性能數(shù)據(jù)(Cpu利用率、Memory的利用率)等。
(4)ITcpPoolsManager,這是基于Tcp連接池實現(xiàn)AS與FS之間通信的核心組件,它用于管理一個應(yīng)用服務(wù)器和多個功能服務(wù)器之間的所有TCP連接池。它借助IServerScheduler從眾多的FS中選取一個最適合并且負載最小的FS來處理功能請求。
(5)TPBasedDataDealer,基于Tcp連接池的處理器,它是一種偽處理器(FakeDataDealer),即它自己并不真正的處理消息,而是將消息轉(zhuǎn)交給ITcpPoolsManager處理。相關(guān)更多內(nèi)容可參考這里: ESFramework介紹之(12)―― 基于Tcp連接池的消息處理器
(6)ITcpPool接口,在 ESFramework介紹之(11)-- Tcp連接池管理器 中我們已經(jīng)知道,ITcpPool接口可以使我們將一組Tcp連接池當(dāng)作一個連接池來看待。
(8)Bridge,這是FsManager_TcpPoolsManager_Bridge橋接組件,它用于連接IFsManager和ITcpPoolsManager,主要目的是將IFsManager的FsAdded事件和FsRemoved事件鏈接到ITcpPoolsManager對應(yīng)的方法上,這樣ITcpPoolsManager就可以動態(tài)的添加/移除對應(yīng)的Tcp連接池了。

理解了上面的組件關(guān)系圖,然后來組裝ESFramework中對應(yīng)的組件以形成基于Tcp連接池的AS與FS通信就非常的簡單了。下面我們來看看基于Remoting的AS與FS通信的實現(xiàn),這個實現(xiàn)在ESFramework V0.3+中才會提供。
還是先給出組件關(guān)系圖:
ESFramework介紹之(33)―― AS與FS通信實現(xiàn)及相關(guān)
可以看到,大部分組件和基于Tcp連接池的實現(xiàn)是一樣的,這樣可以最大化組件的復(fù)用(要達到這樣的效果,需要不斷地重構(gòu)組件),下面介紹一下不一樣的那些組件的作用。
(1)IRemoteHandleManager,用于管理所有的(FS)遠程句柄,因為要與多個FS進行遠程通信,所以需要將這些遠程句柄管理起來,并且IRemoteHandleManager同樣借助了IServerScheduler從眾多的FS中選取一個最適合并且負載最小的FS來以Remoting的方式處理功能請求。
(2)Bridge,這個橋接組件是FsManager_RemoteHandleManager_Bridge,它的作用與FsManager_TcpPoolsManager_Bridge橋接組件相同。它將IFsManager的FsAdded事件和FsRemoved事件鏈接到IRemoteHandleManager對應(yīng)的方法上,這樣IRemoteHandleManager就可以動態(tài)的添加/移除對應(yīng)的FS遠程句柄了。
(3)RemotingBasedDataDealer ,基于Remoting的處理器,通過IRemoteHandleManager將所有的請求轉(zhuǎn)交給遠程句柄處理。
(4)INakeDispatcher,這是ESFramework最內(nèi)部的消息分派器組件,當(dāng)消息到達INakeDispatcher內(nèi)部,就不再與Spy或Hook相關(guān)。
(5)IFsRemotingService_4As,這是FS發(fā)布的遠程服務(wù)組件,該組件將所有來自AS的請求都交給INakeDispatcher分派處理。

我們看到,基于Tcp連接池的實現(xiàn)和基于Remoting的實現(xiàn)的原理基本是一致的,那么何時該使用Tcp連接池的實現(xiàn),何時又使用基于Remoting的實現(xiàn)了?答案取決于多個方面,比如
(1)如果AS與FS都基于ESFramework創(chuàng)建,并且位于同一局域網(wǎng)內(nèi),使用Tcp連接池效率可能更高。因為Remoting底層會對NetMessage進行列集/散集,這會折損效率(即使其底層仍然使用Tcp)。
(2)如果AS與FS分布于廣域網(wǎng)中,并且需要穿越多個防火墻,那么直接使用Tcp連接池可能不可行,因為有的防火墻可能關(guān)閉了我們服務(wù)的Tcp端口。這時可以考慮使用Remoting的方式,因為Remoting可以基于Http進行。
(3)又如果我們的FS為了獲取更高的效率,全部采用C++構(gòu)建,那么無法提供Remoting,這時就只有采用Tcp連接池了。
也許,還有很多其它的情景和對應(yīng)的選擇,你可以自己去思考。

如果兩種方式都可行,那么我們可以隨意的選擇一種,在這兩種實現(xiàn)之間進行切換僅僅是個配置的問題(比如借助Spring.net)。


上篇文章: ESFramework介紹之(32)―― Tcp客戶端核心組件關(guān)系圖

轉(zhuǎn)到: ESFramework 可復(fù)用的通信框架(序)


ESFramework介紹之(33)―― AS與FS通信實現(xiàn)及相關(guān)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 水城县| 聊城市| 通渭县| 红安县| 游戏| 龙游县| 蒲江县| 临澧县| 张家口市| 江油市| 嵩明县| 清丰县| 屯留县| 普洱| 高州市| 曲阜市| 沈阳市| 赞皇县| 兰州市| 新乡县| 久治县| 苏尼特左旗| 庐江县| 砚山县| 巴林左旗| 星座| 新巴尔虎右旗| 木里| 元江| 双城市| 巩义市| 汕头市| 浮梁县| 义乌市| 内黄县| 江山市| 山西省| 信宜市| 泗阳县| 桓仁| 长岭县|