黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

ESPlatform 群集平臺(02) -- 從外部訪問群集

系統(tǒng) 2375 0

本文我們來解決一個常見的問題,那就是在ESPlatform群集之外如何訪問和控制ESPlatform群集了?

ESPlatform 群集平臺(01) -- 遷移到群集平臺 一文中,我們提到ACMS提供了三個Remoting服務(wù)接口:IApplicationService、IClusterControlService、IPlatformCustomizeService。 IApplicationService我們已經(jīng)介紹過了,而 IClusterControlService 和 IPlatformCustomizeService 正是ESPlatform群集系統(tǒng)提供給外部系統(tǒng)(如BL)來訪問或控制群集的。

ESPlatform 群集平臺(02) -- 從外部訪問群集

通常我們會這樣做,將ACMS暴露的 IClusterControlService 和 IPlatformCustomizeService作為群集系統(tǒng)對外暴露的唯一通道,外部系統(tǒng)只能通過ACMS提供的這兩個接口與整個群集系統(tǒng)通信。外部系統(tǒng)不要直接與某個AS通信,除非我們有充分的理由,否則,不要輕易破壞這一規(guī)則。這一規(guī)則的目的在于,盡可能使整個系統(tǒng)(可能是很龐大的、復(fù)雜的)保持簡潔的、清晰的結(jié)構(gòu)。

一.IClusterControlService接口

IClusterControlService接口用于訪問群集系統(tǒng)中的AS服務(wù)器信息或控制群集中的服務(wù)器。IClusterControlService的定義如下:

1.AS基礎(chǔ)信息與事件

當(dāng)我們動態(tài)地向群集中添加一臺AS時,ACMS將會觸發(fā)IClusterControlService接口的ServerRegistered事件;同樣的,當(dāng)動態(tài)地從群集中移除一臺AS時,將觸發(fā)IClusterControlService接口的ServerUnregistered事件。請注意,如果某臺AS意外掛掉,則ACMS是不知情的,我們必需手動調(diào)用IClusterControlService接口的RemoveServer方法,此方法的執(zhí)行仍然會觸發(fā)IClusterControlService接口的ServerUnregistered事件。

GetServer用于獲取群集中某臺AS的詳細(xì)信息,其返回的ClusterServerInfo類圖如下:

ESPlatform 群集平臺(02) -- 從外部訪問群集

通過返回的ClusterServerInfo,我們可以知道目標(biāo)AS基本信息:啟動時間、IP端口地址、在線用戶數(shù)量、當(dāng)前的CPU使用率、內(nèi)存使用率、是否處于凍結(jié)狀態(tài)。

2.群集分配策略

所謂群集分配策略,就是當(dāng)一個客戶端要連接到AS時,我們應(yīng)該分配群集中的哪臺AS給他?選擇AS所采取的策略就是群集分配策略。

AS內(nèi)置了三種常見的群集分配策略:輪詢、人數(shù)最少、CPU利用率最小。該策略由ServerAssignedPolicy枚舉定義:

在ACMS的配置文件ESPlatform.ACMServer.exe.config中,有key為ServerAssignedPolicy的配置項,我們可以在此指定所采用的AS分配策略。

IClusterControlService接口的GetServerToLogon方法將依據(jù)ServerAssignedPolicy的設(shè)置返回恰當(dāng)?shù)腁S。

當(dāng)我們想讓某臺AS不再接受新的客戶端連接時,可以調(diào)用FreezeServer方法來凍結(jié)它。當(dāng)AS被凍結(jié)后,GetServerToLogon方法將永遠(yuǎn)不會返回這臺AS。

當(dāng)然,我們也可以完全自己定義AS的分配策略,而忽略ACMS提供的內(nèi)置的分配策略的存在。

假設(shè)我們已經(jīng)采用了ACMS內(nèi)置的分配策略或?qū)崿F(xiàn)了自定義的分配策略,那么,客戶端如何知道自己要登錄到哪個AS了?需要有個第三方來提供這一查詢服務(wù)。我們可以簡單地做到這一點,比如,發(fā)布一個WebService,客戶端先通過訪問該WebService獲取要登錄的AS的地址,然后再去連接目標(biāo)AS,等等。

二.IPlatformCustomizeService 接口

如果,希望從外部發(fā)送一個指令給群集中的某臺AS或在線的某個客戶端,該如何做了? 我們可以使用ACMS暴露的IPlatformCustomizeService接口。

就像ESPlus提供的自定義信息功能一樣,我們可以從群集外部通過IPlatformCustomizeService接口發(fā)送自定義信息甚至同步調(diào)用給某個AS或某個在線客戶端,當(dāng)然,這些信息都是經(jīng)過ACMS進行中轉(zhuǎn)的。接口中每個方法的注釋已經(jīng)描述得很清楚了,這里就不再贅述了。

1.向AS發(fā)送自定義信息

IPlatformCustomizeService接口的BroadcastInCluster、SendToServer、QueryServer方法用于發(fā)送自定義信息或同步調(diào)用給AS,那么AS如何來處理這些信息了?

AS需要實現(xiàn)ESPlatform.Server.Application. ICallbackHandler 接口來處理來自群集外部的信息。

ICallbackHandler接口的三個方法剛好對應(yīng) IPlatformCustomizeService接口的三個方法。我們在實現(xiàn)了ICallbackHandler接口后,可以將其實例注入到ESPlatform.Rapid.RapidServerEngine的CallbackHandler屬性上。如此,當(dāng)AS接收到自定義信息時,便會回調(diào)ICallbackHandler對應(yīng)的方法來處理了。

2.向客戶端發(fā)送自定義信息

同樣的問題,IPlatformCustomizeService接口的SendToClient、QueryClient方法用于發(fā)送自定義信息或同步調(diào)用給某個在線的客戶端,那么客戶端如何來處理這些信息了?實際上,客戶端不需要實現(xiàn)新的接口,而是通過ICustomizeHander接口來統(tǒng)一處理。無論是來自AS的信息,還是來自群集外部的信息,都將有ICustomizeHander接口來處理。關(guān)于ICustomizeHander接口的詳細(xì)介紹,可以參見 ESFramework 開發(fā)手冊(01) -- 發(fā)送和處理信息

要注意的是,在分配信息類型informationType時,來自群集外的自定義信息不要與普通的自定義信息的類型重復(fù)就可以了。

三.例子

下面我們舉個簡單的例子,來說明外部系統(tǒng)與ESPlatform群集的交互。

我們假設(shè)有個簡單的在線的網(wǎng)絡(luò)游戲系統(tǒng),由B/S和C/S兩個子系統(tǒng)組成。B/S子系統(tǒng)用于實現(xiàn)像用戶注冊、資料修改、后臺管理等業(yè)務(wù)功能;C/S子系統(tǒng)則用于實現(xiàn)所有的游戲邏輯,由于在線用戶數(shù)量巨大,所以我們使用了ESPlatform群集平臺。整個系統(tǒng)結(jié)構(gòu)簡化后如下圖所示:

ESPlatform 群集平臺(02) -- 從外部訪問群集

下面我們舉兩個常見的需求。

1.修改游戲配置參數(shù)

為了方便游戲管理員GM的操作,我們的B/S子系統(tǒng)提供了后臺網(wǎng)站給管理員進行重要的游戲參數(shù)設(shè)置。比如,像游戲中的金融平衡系數(shù)等,這些參數(shù)的值必需提交給每個AS生效才可以。對于類似的需求,可用類似如下的流程實現(xiàn):

(1)GM通過后臺網(wǎng)站將修改參數(shù)的請求提交給Web。

(2)Web再向BL提交。

(3)BL修改DB(如果需要的話)成功后,發(fā)送自定義信息給ACMS。(通過IPlatformCustomizeService接口的BroadcastInCluster方法)

(4)ACMS在群集中廣播自定義信息。

(5)每個AS都將回調(diào)上述ICallbackHandler接口的HandleBroadcast方法來使參數(shù)設(shè)定生效。

2.充值

充值功能一般在Web中完成,而在線的客戶端卻要實時顯示最新的余額信息。類似這樣的流程也很容易實現(xiàn):

(1)玩家通過前臺網(wǎng)站將充值請求提交給Web。

(2)支付成功后,Web向BL提交。

(3)BL修改DB成功后,發(fā)送自定義信息給ACMS。(通過IPlatformCustomizeService接口的SendToClient方法)

(4)ACMS根據(jù)玩家的ID找到其所在的AS,然后將信息轉(zhuǎn)發(fā)給該AS。

(5)AS收到自定義信息后,在將其轉(zhuǎn)發(fā)給目標(biāo)玩家的客戶端。

(6)客戶端收到自定義信息后,更新內(nèi)存中的最新余額信息,并更新UI顯示。

為了方便討論,我們這里對舉例的場景做了很多簡化,真正的系統(tǒng)通常要比這里描述的復(fù)雜很多。比如,ACMS可能需要訪問數(shù)據(jù)庫,而AS可能需要訪問BL或者緩存服務(wù)器,等等。這些擴展設(shè)計該如何做,取決于我們實際的項目需求。后續(xù)的文章,我們將更深入地討論ESPlatform群集系統(tǒng)與外部的交互,不僅僅外部主動調(diào)用群集系統(tǒng),群集系統(tǒng)也可以主動與外部系統(tǒng)通信。

閱讀 更多ESFramework開發(fā)手冊系列文章

-----------------------------------------------------------------------------------------------------------------------------------------------

關(guān)于ESFramework的任何問題,歡迎聯(lián)系我們:

電話:027-87638960

Q Q:372841921





ESPlatform 群集平臺(02) -- 從外部訪問群集


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論