ET消息流程

不了解ET的,點(diǎn)擊?https://github.com/egametang/ET

一:消息分類(lèi)


消息按照因果關(guān)系分類(lèi),可以分為Request和Response,當(dāng)然也有直接繼承至Message的,表示我這個(gè)消息發(fā)出去后我就不care了。Request和Response是成對(duì)的,我發(fā)了一個(gè)Request,你必須回我一個(gè)對(duì)應(yīng)的Response消息。

消息還可以按照類(lèi)型分類(lèi),基本分為兩大類(lèi),一般消息和Actor消息。Actor消息可以認(rèn)為是戰(zhàn)斗相關(guān)消息,戰(zhàn)斗unit和玩家client之間發(fā)送的都是Actor消息,比如幀同步消息(AFrameMessage)就是一種ActorMessage,其他的都可以認(rèn)為是一般消息,比如登陸,創(chuàng)角等。

Actor相關(guān)的消息在服務(wù)器間相互轉(zhuǎn)發(fā)的時(shí)候,會(huì)被包裝一下。想象一下,一個(gè)Client與GateServer之間的通信,消息里面是不用帶玩家角色I(xiàn)d的,我們之間的Session對(duì)象就表明了我的身份。但是GateServe把這個(gè)消息轉(zhuǎn)發(fā)給MapServer的時(shí)候,消息就得包裝一下,帶上UnitId的信息,這樣MapServer收到這個(gè)消息后才知道是那個(gè)玩家發(fā)過(guò)來(lái)的。包裝actor消息包括ActorRequest和ActorRPCRequest,AActorMessage不需要回復(fù),就包裝在ActorRequest中,而AActorRequest需要回復(fù),包裝在ActorRPCRequest中。所以ActorRequest和ActorRPCRequest包括他們的回復(fù)消息只在服務(wù)器之間傳送Actor消息的時(shí)候用。

其實(shí)按照消息的路徑,還可以把消息分為內(nèi)部消息和外部消息,內(nèi)部就是服務(wù)器內(nèi)部之間發(fā)送的,外部則是負(fù)責(zé)服務(wù)器和客戶(hù)端通信的。在ET中,有InnerMessage和OuterMessage兩個(gè)文件,里面定義的消息就分別是內(nèi)部和外部消息。只有Realm服務(wù)器和Gate服務(wù)器有NetOuterComponent,可以與客戶(hù)端通信,其他服務(wù)器都只有NetInnerComponent,Realm服務(wù)器作為初始登陸服務(wù)器,負(fù)責(zé)分配Gate服務(wù)器給玩家,之后玩家都直接與Gate服務(wù)器通信,之后其他服務(wù)器都通過(guò)Gate服務(wù)器與玩家通信。

二:消息流程


這里面弄清了幾個(gè)原則,基本就清楚了消息的處理原則:

1:Gate服務(wù)器既需要與客戶(hù)端通信,也需要與其他服務(wù)器通信。所有同時(shí)擁有NetOuterComponent和NetInnerComponent。

2:Map服務(wù)器不直接與客戶(hù)端通信,需要通過(guò)Gate服務(wù)器轉(zhuǎn)發(fā),所以只有NetInnerComponent。

3:客戶(hù)端發(fā)送給Gate服務(wù)器的消息,都是通過(guò)NetOuterComponent走的,所以Actor消息都是AActorMessage或者AActorRequest類(lèi)型(因?yàn)镚ate服務(wù)器上接收消息的Session就表明了客戶(hù)端的身份),而這些Actor消息是需要轉(zhuǎn)發(fā)給Map服務(wù)器的,Gate服務(wù)器和每個(gè)Map服務(wù)器之間都只有一個(gè)Session(屬于NetInnerComponent),所有Actor消息都通過(guò)這個(gè)Session發(fā)送,所以Actor消息在這里需要包裝成ActorRequest或者ActorRpcRequest消息,帶actorId,Map服務(wù)器接收到這個(gè)消息后通過(guò)actorId才知道交給哪個(gè)Actor處理。

4:Map服務(wù)器發(fā)送給Gate服務(wù)器的ActorRequest或者ActorRpcRequest消息,Gate服務(wù)器只需要把包裝里面的AMessage發(fā)送給對(duì)應(yīng)的客戶(hù)端即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • Actor系統(tǒng)的實(shí)體 在Actor系統(tǒng)中,actor之間具有樹(shù)形的監(jiān)管結(jié)構(gòu),并且actor可以跨多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行透...
    JasonDing閱讀 3,521評(píng)論 2 6
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,810評(píng)論 11 349
  • 新夏停雨后,狂風(fēng)摧斷樹(shù)。唯有耕種人,不顧勞辛苦。
    非典型女博士閱讀 176評(píng)論 0 1
  • 前兩三天,無(wú)意中看到一部電視劇,結(jié)果看著看著就入迷了! 我平時(shí)看的電視不少,但這一年的時(shí)間,我基本很克制了,除非時(shí)...
    小饅頭0601閱讀 220評(píng)論 0 0

友情鏈接更多精彩內(nèi)容