最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Unity ET 框架 分布式網(wǎng)絡(luò)消息通信 詳

2022-12-10 15:48 作者:觀鈴的夢(mèng)  | 我要投稿

DEMO配表

StartMachineConfig
StartProcessConfig@s
StartSceneConfig@s

ActorMessageSenderComponent.Instance.Send 會(huì)將消息體或流完整的發(fā)到 對(duì)應(yīng) 進(jìn)程

再通過(guò)NetInnerComponent處理

ActorMessageSenderComponent.Instance.Call 會(huì)將消息體或流完整的發(fā)到 對(duì)應(yīng) 進(jìn)程 再通過(guò)NetInnerComponent處理


DEMO 流程


當(dāng)客戶端發(fā)送登錄請(qǐng)求 ? 到Realm

隨機(jī)拿到Gate對(duì)應(yīng)的SceneConfig后 用其InstanceId(包含了Gate內(nèi)網(wǎng)的進(jìn)程號(hào))對(duì)Gate 進(jìn)程 的內(nèi)網(wǎng)進(jìn)行通訊

ActorMessageSenderComponent.Instance.Call

拿到目標(biāo)內(nèi)網(wǎng)進(jìn)程 從Realm內(nèi)網(wǎng)建立 拿到對(duì)應(yīng)編號(hào)的Channel 與 Gate內(nèi)網(wǎng) 沒(méi)有就連接 并發(fā)送消息

ProcessActorId processActorId = new ProcessActorId(actorId);

processActorId.Process 對(duì)應(yīng) 了 目標(biāo)(Gate)

processActorId.ActorId 對(duì)應(yīng) 將 當(dāng)前進(jìn)程注入 修改 為了回執(zhí)

實(shí) ActorId 是 Gate 的 SceneConfig InstanceId

虛 ActorId 是 為了Gate的內(nèi)網(wǎng)收到消息后 知道 消息是由哪個(gè)內(nèi)網(wǎng)進(jìn)程發(fā)出

當(dāng)Gate服務(wù)端內(nèi)網(wǎng)收到消息時(shí) 通過(guò) SessionStreamDispatcherServerInner 分發(fā) 處理 R2G_GetLoginKey

G2R_GetLoginKey 是內(nèi)網(wǎng)消息體

虛 ActorId 是 為了 拿到 回執(zhí) 的 對(duì)應(yīng)內(nèi)網(wǎng)(Realm)將 InnerMessageDispatcherHelper.HandleIActorRequest 處理完 拿到 對(duì)應(yīng) IActorResponse 再拿到來(lái)源或與來(lái)源(Realm)建立連接 發(fā)回

內(nèi)網(wǎng)消息 分發(fā) 的 實(shí) ActorId 為 沒(méi)什么用 這里 對(duì)應(yīng) Gate 的 SceneConfig 的 InstanceId

Realm服務(wù)器 內(nèi)網(wǎng)拿到 后 通過(guò) SessionStreamDispatcherServerInner 分發(fā) 處理 G2R_GetLoginKey

將對(duì)應(yīng)的tcs(類似TaskCompetedTask)SetResult();

await 完成 得到 Key 返回給客戶端



當(dāng) 客戶端 發(fā)送 進(jìn)入 地圖 的 消息 外網(wǎng)消息解析 常規(guī)

MessageHelper.SendToClient 最終調(diào)用

ActorMessageSenderComponent.Instance.Send(actorId, message);

actorId 為 客戶端 連接的 Gate Session InstanceId

當(dāng)Gate服務(wù)端內(nèi)網(wǎng)收到消息時(shí) 通過(guò) SessionStreamDispatcherServerInner 處理 自行處理 拿到 Session 發(fā)送

根據(jù) 發(fā)來(lái)的ActorId 拿到原來(lái) 的 Session 發(fā)送 (這里看上去雞肋 但轉(zhuǎn)移Map時(shí)有用 這也是為什么不在C2G_EnterMapHandler直接拿到Session 返回的原因

M2M_UnitTransferRequest 將 Unit 轉(zhuǎn)移到對(duì)應(yīng)地圖Map

await LocationProxyComponent.Instance.Lock

調(diào)用 ActorMessageSenderComponent.Instance.Call 發(fā)送 ObjectLockRequest Location 內(nèi)網(wǎng) 收到后調(diào)用

鎖住unit的Id 在time秒后解鎖 解鎖后 會(huì) 記入定位字典

協(xié)程中 若時(shí)間到之前 已經(jīng) 被 UnLock lockInfo被Dispose InstanceId置為0 返回退出

調(diào)用 ActorMessageSenderComponent.Instance.Call 發(fā)送 M2M_UnitTransferRequest 給 對(duì)應(yīng) Map 內(nèi)網(wǎng) 收到后調(diào)用

后 回執(zhí) 給 Gate Gate 處理

將對(duì)應(yīng)的tcs(類似TaskCompetedTask)SetResult();

await 完成 解鎖 Dispose Unit

解鎖時(shí)注入的response.NewInstanceId 是 Unit 所在 Map 的 進(jìn)程號(hào) 因此可以 通過(guò) 此NewInstanceId知道Unit重設(shè)后所在內(nèi)網(wǎng)進(jìn)程

而最新unit.Id對(duì)應(yīng)的InstanceId可以通過(guò) LocationProxyComponent.Instance.Get 獲得

ActorLocationSenderComponent消息通訊會(huì)自動(dòng)獲得


當(dāng)客戶端切換地圖時(shí)

發(fā)送消息體 C2M_TransferMap 是 IActorLocationMessage 內(nèi)網(wǎng)消息體 Gate外網(wǎng)接收

詢問(wèn)Location服務(wù)器 要 Unit 當(dāng)前的 InstanceId 以獲得對(duì)應(yīng) 內(nèi)網(wǎng)進(jìn)程

再發(fā)送給 對(duì)應(yīng) 的 Map 內(nèi)網(wǎng)服務(wù)(NetInnerComponent) 去接收 C2M_TransferMap 的流

再 用 Map 內(nèi)網(wǎng)服務(wù) SessionStreamDispatcherServerInner 去處理 內(nèi)網(wǎng)方式

Map 處理 下

轉(zhuǎn)移到另一個(gè)內(nèi)網(wǎng)Map服務(wù)

會(huì)拿到客戶端與Gate連接的Session 的 InstanceId 通過(guò)ActorMessageSenderComponent.Instance.Send方式將 消息體發(fā)送給Gate內(nèi)網(wǎng) 再由 Gate內(nèi)網(wǎng) SessionStreamDispatcherServerInner 解析 M2C_StartSceneChange 外網(wǎng)消息體

回執(zhí)給Gate結(jié)果


當(dāng)客戶端右鍵行走

發(fā)送 C2M_PathfindingResult 在 連接的Gate 外網(wǎng) SessionStreamDispatcherServerOuter 分發(fā)

將消息發(fā)送給 unit 所在 服務(wù)對(duì)應(yīng)內(nèi)網(wǎng)進(jìn)程 (Map

然后 Map 內(nèi)網(wǎng) 收到后 SessionStreamDispatcherServerInner 分發(fā)

檢測(cè)為內(nèi)網(wǎng)處理的消息 IActorLocationMessage 繼承 IActorRequest

再回執(zhí)給 Gate 完成


Unity ET 框架 分布式網(wǎng)絡(luò)消息通信 詳?shù)脑u(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
北碚区| 根河市| 乌拉特中旗| 兴海县| 抚松县| 张家港市| 青州市| 庆阳市| 成都市| 岳阳县| 郎溪县| 甘孜| 神农架林区| 定陶县| 河曲县| 临沧市| 江西省| 泽州县| 广安市| 肇州县| 邻水| 南岸区| 保山市| 北安市| 江口县| 康平县| 惠来县| 青龙| 南安市| 垫江县| 全州县| 观塘区| 启东市| 象州县| 麦盖提县| 萝北县| 西藏| 伊春市| 新晃| 宿州市| 耒阳市|