0x00 回顧
上一篇文章中我們講到了游戲中的區(qū)服劃分,其中也提到了一些賬號登陸的流程。那這個小節(jié)我們好好梳理一下登陸的流程,以及登陸中遇到的一些異常情況,到最后的成功獲取角色列表。
還記得我們上個小節(jié)中講到的,賬號密碼驗證成功后,登陸網(wǎng)關(guān)服務(wù)器(LoginGateServer)會獲取到這個ack的信息,并且向中心服務(wù)器(CenterServer)去查詢當前賬號狀態(tài),并由CenterServer分配下一階段的路由。這里大概會遇到以下的幾種異常:
1,賬號異常
這里的異常一般是針對賬號安全所做的一些保護措施,可以做分級處理。舉個例子,當發(fā)現(xiàn)與上次登陸的城市不同的時候,或是與上次登陸的設(shè)備ID不同的時候,就要給玩家發(fā)出安全確認的請求,常見的如各種奇葩的驗證碼,或是手機pin碼,游戲采取實名制之后,后者最為常見。
另一種異常是運營中的常見手段,如封號,或是禁言等,當然也可以針對角色來做,那樣更靈活,不過以國內(nèi)的網(wǎng)游環(huán)境來講,一般就是直接封賬號,沒啥好商量的。一個角色出現(xiàn)問題,同一個游戲世界內(nèi)的其他角色都會受到牽連。
2,游戲人數(shù)擁擠,沒有坑位
CenterServer會定時的去采集每一個與游戲服務(wù)器相連的網(wǎng)關(guān)服務(wù)器(GameGateServer)的負載情況。如果有空閑的坑位,CenterServer會把新的鏈接路由過去。如果當前游戲很火爆,如開服的第一天,很可能所有服務(wù)器都沒有坑位了,那么CenterServer就會把當前的鏈接放到一個隊列里,并且每隔一段時間會把當前隊列的狀態(tài)廣播給所有的排隊玩家,大家最關(guān)心的就是前面還有多少人。
如果當前賬號一切正常,那么中心服務(wù)器會給當前鏈接分配一個新的游戲網(wǎng)關(guān)GameGateServer,包括這個服務(wù)器的ID,IP,Port,用戶就會嘗試去鏈接該GameGateServer,連接成功后,原來與LoginGateServer的鏈接就會關(guān)閉掉,空出資源。
到此為止,賬號處理的相關(guān)流程,基本完畢,開始進行游戲內(nèi)的數(shù)據(jù)加載。當然第一步就是加載當前游戲世界內(nèi)的所有角色信息。

0x01 角色列表
我們回憶一下,在通常的角色列表界面,我們能看到什么?
1,角色名稱
2,角色等級
3,角色性別
4,角色職業(yè)
5,角色裝備
6,角色時裝
這些是最基礎(chǔ)的,通常也是必須顯示的,其他還有一些策劃會按照自己的習慣來要求的,各不相同,比如有:
1,角色工會
2,角色VIP等級
3,角色寵物
4,角色坐騎
5,...
那有哪些字段我們不需要呢?
1,角色屬性
2,角色貨幣信息
3,角色好友信息
4,角色郵箱信息
5,...
類似于這種只有在游戲場景中才使用到的字段,在當前界面并不需要展示,所以也不用添加在通訊協(xié)議中。

針對上面所述,我們應(yīng)該也能設(shè)計出前后臺的通訊協(xié)議了。
還有一些我們必需的字段,是我們看不到的,比如角色上次下線時所在的地圖ID,以及在該地圖的坐標(X,Y,Z),角色再次上線,我們要把它擺放在原來的位置。當然這是下一步的事情,到目前為止,我們已經(jīng)登陸成功,并且把角色列表成功顯示,本小節(jié)的任務(wù)也就完成了。
0x03 總結(jié)
游戲的登陸邏輯不復雜,但需要注意的點會很瑣碎,異常分級要做配置,避免硬編碼。最后,留一個小問題,就是在游戲中什么時候需要重新驗證登陸,什么時候只是切換服務(wù)器連接。這個問題考慮清楚了,對登陸流程也就沒什么問題了。下一個小節(jié),我們來探討一下角色場景加載。