?當公司有很多游戲的時候,那么公司往往會有一個統一的賬號管理平臺,就就像盛大通行證、網易通行證,戰網平臺,這些平臺統一管理游戲的賬號數據。
???????? 打個比方,現在我們玩星辰變,那么玩家登陸游戲的時候有兩個過程,一是登陸游戲賬號,取得我們需要登陸的游戲區的網關,也就是之前說平臺服務器那里,然后是進入到游戲角色選擇界面,登陸到星辰變游戲中。第一步已經在《數據/平臺服務器》說過了。現在說第二階段。
???????? 在敘述這個過程中,我們需要知道玩家登陸游戲時“卡號”的現象,也就是玩家某此下線,沒有設置玩家下線標志或是清除某些上線數據,導致玩家在下一次登陸時,造成無法登陸的現象,我們在程序設計,考慮到這一步就可以了。
???????? 我們已經進入到星辰變的游戲選擇界面,
1.??????我們點擊進入游戲,那么客戶端發送玩家登陸游戲的數據給網關,網關根據之前的令牌,驗證是否可以通過
2.??????網關發送消息到會話,會話的全區玩家管理器中添加新的玩家,然后通知super
3.??????Super添加玩家的信息,(主要是玩家的各個服務器id,),然后通知數據服務器;
4.??????數據服務器通過這個賬號id去數據庫讀取這個玩家的數據,如果有,讀取玩家數據,
數據服務器將玩家的基本游戲數據發給客戶端,并且通知該玩家的場景服務器,有玩家上線
5.??????場景服務器上解析來自數據服務器的數據,添加一個新的玩家,做上線處理,并且通知會話服務器,玩家登陸到某個場景了
6.??????會話服務器知道該玩家登陸到某個場景了,做上線處理,主要是社會關系之類的
從網關之后的每一步,都會發送一個消息到網關服務器,告訴網關服務器該玩家有沒有登陸成功,如果沒有成功,需要清除玩家這一次的登陸信息,否則下次登陸時,就卡號了,玩家下線時,必須清除玩家在每個服務器上的在線情況,否則下次就無法登陸了。總之,我們再設計時,考慮好這些數據的處理就可以了。這就是一個玩家的登陸流程了,當中的異常處理就自己去處理了。
我們在做功能時,在幾個服務器間有數據交互時, 一定要避免流程重入,在一次數據交互沒有全部完成時,不能讓流程從中間切入,或流程重復發起,只要是在服務器上做的驗證處理,就一定要想周全,這樣也就能最大程度的避免外掛,就算在消息中添加冗余數據也是可以的。