游戲服務(wù)器登錄認(rèn)證
游戲需進(jìn)行登錄惨好、賬號密碼驗證埠巨、上線下線記錄等,當(dāng)客戶端向游戲服務(wù)器連接之前虾标,先和賬號登錄服務(wù)器連接寓盗。另一種情況是客戶端直接和游戲服務(wù)器相連,然后游戲服務(wù)器作為客戶端的代理向賬號登錄服務(wù)器進(jìn)行驗證。驗證后獲取游戲服務(wù)器列表傀蚌,由玩家選擇進(jìn)入那個游戲服務(wù)器基显。
賬號登錄服務(wù)器
賬號登錄服務(wù)器具有兩個職責(zé),分別是管理賬號和驗證賬號善炫。
- 管理賬號
賬號的注冊生成撩幽、刪除等操作,賬號一般會使用數(shù)據(jù)庫進(jìn)行管理箩艺。 - 驗證賬號
注冊后會生成賬號摸航,登錄游戲時會輸入賬號密碼或通過第三方登錄的方式來操作。
登錄行為中可能會出現(xiàn)的異常情況
- 同一賬戶在多個終端登錄
- 同一賬戶登錄報文被持續(xù)多次發(fā)送
- 登錄過程中某服務(wù)進(jìn)程失效
- 登錄過程中終端連接已斷開
為保證登錄過程的健壯舅桩,可使用多段登錄、服務(wù)器無狀態(tài)化雨膨、時序圖推到擂涛。
- 多段登錄
登錄過程越長設(shè)計的服務(wù)進(jìn)程越多,不確定因素風(fēng)險也就越大聊记。 若服務(wù)器架構(gòu)合理可將服務(wù)器架構(gòu)按功能區(qū)塊化即微服化撒妈,根據(jù)分而治之的原理,將整個登錄過程拆分為多個模塊排监,每個登錄處理模塊相對獨立做成多段式登錄狰右。
多段登錄好處在于
- 登錄復(fù)雜度被降冪,登錄過程簡化舆床。
- 多段登錄中即使某段登錄不成功也只會讓某部分游戲功能失效棋蚌。
多段登錄常見劃分形式
- 大廳段登錄以保證能夠正常進(jìn)入大廳
- 房間段登錄以保證能夠正常進(jìn)入房間
- 跨服網(wǎng)關(guān)段登錄以保證正常跨服操作挨队,比如跨服聊天等谷暮。
服務(wù)無狀態(tài)化
多服務(wù)進(jìn)程間通信之所以容易產(chǎn)生問題,其中一個很大的原因是代碼實現(xiàn)中會在多個進(jìn)程中保存同一賬號相關(guān)的數(shù)據(jù)盛垦,因此容易發(fā)生服務(wù)進(jìn)程間數(shù)據(jù)不同步湿弦。所有類型服務(wù)器都可以做成無狀態(tài)化的,這樣登錄過程的復(fù)雜度又降低了一個冪次腾夯。
時序圖推導(dǎo)
多服務(wù)器交互過程中如果直接編碼颊埃,從代碼上反查通常會很苦難。如果有工具能將整個過程清晰的描繪出來蝶俱,那么檢查其中的錯誤會方便很多班利。整個流程都確定后再編碼,可以事半功倍跷乐。而這個工具就是時序圖肥败。
大廳登錄
登錄涉及服務(wù)
大廳段登錄會涉及到的服務(wù)進(jìn)程包括客戶端Client、登錄服Login、大廳服Lobby馒稍、緩存服Cache皿哨、數(shù)據(jù)庫服DB。
- Login 負(fù)責(zé)賬號驗證纽谒,包括第三方平臺賬號驗證证膨。
- Lobby 負(fù)責(zé)個人業(yè)務(wù),不涉及多玩家交互鼓黔。
登錄實現(xiàn)思路
- Login央勒、Lobby無狀態(tài)化,數(shù)據(jù)臨時存放在Cache中澳化。
- Login通過DB驗證賬號密碼并將自己和Lobby的令牌存入Cache
- Client通過令牌正常與Login和Lobby交互
登通信方式
從傳統(tǒng)的角度來看首先會先到使用TCP崔步,如果使用HTTP登錄流程的復(fù)雜度將再次降冪,可以基于大型網(wǎng)站運(yùn)維手段部署Login和Lobby缎谷,因此采用HTTP作為通訊手段井濒。
目前蘋果公司app商家審核是禁止HTTP通信的,所以最好使用HTTPS作為通信協(xié)議列林。使用HTTPS的好處是信息被加密瑞你,同時帶來缺點是服務(wù)器資源額外的開銷,包括CPU和帶寬等希痴。
登錄令牌
對于TCP連接而言者甲,Token令牌只用于連接后的第一次身份驗證,隨后Token失效砌创,因此可以認(rèn)為是非常安全的虏缸。而對HTTP/HTTPS來說,由于是基于短連接的纺铭,因此每次請求都必須攜帶Token寇钉,這就有可能存在Token被盜用而偽造請求的情況。因此可以將Token做加密處理舶赔,比如使用md5(token + salt)的方式扫倡,讓salt變化即生成動態(tài)令牌。
登錄時序
多終端登錄
- 當(dāng)暫無賬號信息創(chuàng)建賬號時竟纳,實現(xiàn)中必須保證當(dāng)且僅當(dāng)沒有賬號數(shù)據(jù)時才創(chuàng)建賬號撵溃。
- 最后終端將重置令牌,因此之前的終端中的令牌局部可用锥累。