經過這幾天的研究、遇到了無數坑,經過了群主和群裡的各位大佬一一指點,算了明白了actor的使用和機制。
actor是et框架最核心的東西了,使用actor之前一定要明白什麼是分布式伺服器,我簡單說一下。
分布式簡單說就是我有3臺伺服器共同為乙個遊戲服務、那麼他們的關係是:
客戶端第一次通訊:
客戶端-驗證伺服器-閘道器伺服器-驗證伺服器-客戶端
客戶端通訊(進行了第一次通訊後):
客戶端-閘道器伺服器-其他功能伺服器(db、map伺服器chat聊天伺服器等)-閘道器伺服器-客戶端
也就是說所有資料都是統一通過閘道器伺服器中轉的。
例如:a伺服器(驗證賬號、閘道器伺服器、位置伺服器)。
b伺服器(資料庫操作簡稱db)。
c伺服器(map伺服器、chat聊天伺服器等)。
驗證賬號伺服器(realm):
驗證操作流程:
1、驗證賬號的合法性(我是通過資料庫的)。
2、根據配置檔案找到閘道器的ip位址和埠、如果有多個就隨機分配(這裡可以做個負載均衡、例如判斷閘道器伺服器的人數進行分配)。
3、向gate伺服器傳送資料,請求建立乙個臨時的key
4、這個key只有20秒的時間、超過了就自動銷毀了、可以自己定義持續時間。
5、把接收到的key加上這個gate伺服器的ip和埠傳送給客戶端。
閘道器伺服器(建立key、這個就不介紹了看圖就明白了):
閘道器伺服器(把當前伺服器註冊到loaction伺服器上):
操作流程:
1、首先查詢臨時key是否存在,不存在就表示是非法的,我**裡沒有寫這塊。
2、使用建立乙個player、並設定id。並新增到playercomponent元件裡。
3、actor訊息**是通過player的unitid來向位置伺服器查詢該傳送到哪個伺服器的。
4、至於playercomponent和unitgatecomponent是什麼,自己看下**吧,很容易理解的。
5、註冊actor**(當註冊了後、才能通過這個伺服器轉到訊息到其他伺服器)。
6、通過配置檔案獲取map伺服器的ip和埠(可能有多個,我就用了乙個所以我取了第乙個、如果多個可以考慮用每個伺服器的最大人數來分配,這個要自己實現了)。
7、向map伺服器傳送建立actor請求(這塊下面會有介紹map是怎麼操作的)。
8、這裡很重要、很重要、很重要(我當初就在這裡耽誤了很多時間,最我來說是個坑)、map伺服器會傳送乙個m2gregisteractorresponse.actorid。
9、這個actorid很重要、是map註冊到位置伺服器的id,actor傳送訊息會通過這個id來**到指定伺服器的。
10、actor訊息**是通過player的unitid來**的,所以我把actorid賦值給player的unitid。
map伺服器(接收建立actor請求):
操作流程:
1、建立乙個unit,並指定這個是英雄型別的。
2、給unit新增actorcomponent並新增位置到位置伺服器,這很重要,沒有這個是沒辦法分發訊息的。
3、把這個unit新增到actormanagercomponent元件裡,我個人理解這個是用來管理該伺服器上所有的actor物件。
4、把生成的unitid傳送出去。
總結:完成以上就可以進行actor**了,只需要在map伺服器先實現不同的handler就可以。
tp框架使用心得
我們知道在對資料庫進行update操作時如果對錶資料沒有進行任何修改時是會報錯的,而當我們將結果返回給使用者時,使用者肯定不知道是因為他沒有進行任何操作導致的報錯,他們最直觀的反映就是系統出錯了,接著就是一片惶恐。所以為了防止上述情況的發生,可以試著在表結構中新增乙個update time字段,每次...
beego框架使用心得
一 使用beego的http library 需要注意,預設情況下maxconnectionsperhost引數為 1,即預設不使用連線池。問題 大量併發情況下,http底層的tcp連線得不到重複利用,造成大量的tcp短連線。雖然連線使用之後就會被釋放,但是tcp完全釋放需要一定時間 主要是最後一階...
jeecg boot 框架 使用心得 筆記
引用自官方手冊 jeecg boot 是一款基於springboot 生成器的快速開發平台!採用前後端分離架構 springboot,mybatis,shiro,jwt,vue ant design。強大的 生成器讓前端和後台 一鍵生成,不需要寫任何 保持jeecg一貫的強大,絕對是全棧開發福音!g...