游戲服務(wù)器架構(gòu)系列 - 網(wǎng)關(guān)服務(wù)

繼上一篇介紹了的分布式游戲服務(wù)器架構(gòu),后面的課程我們將對于架構(gòu)中的每一種服務(wù)和具體技術(shù)細節(jié)進行詳細介紹。

首先回顧下游戲服務(wù)器架構(gòu)中的列出的服務(wù),包括:

網(wǎng)關(guān)服務(wù)器

中心服務(wù)器

單區(qū)服務(wù)器

跨區(qū)服務(wù)器

鏡像服務(wù)器


今天我們來介紹游戲服務(wù)器架構(gòu)中至關(guān)重要的服務(wù):網(wǎng)關(guān)服務(wù)器

服務(wù)描述:即用于維持玩家客戶端的連接,將玩家發(fā)的游戲請求轉(zhuǎn)發(fā)到具體后端服務(wù)的服務(wù)器。

功能特性:

1. 對外開放:即客戶端需要知道網(wǎng)關(guān)的IP和端口,才能連接上來;

2. 統(tǒng)一入口:架構(gòu)中可能存在很多后端服務(wù),如果沒有一個統(tǒng)一入口,則客戶端需要知道每個后端服務(wù)的IP和端口。

3. 請求轉(zhuǎn)發(fā):由于統(tǒng)一了入口,所以網(wǎng)關(guān)必須能將客戶端的請求轉(zhuǎn)發(fā)到準確的服務(wù)上。

4. 無感更新:由于玩家連接的是網(wǎng)關(guān)服務(wù)器,只要連接不斷;更新后端服務(wù)器對玩家來說是無感知的,或者感知很少(根據(jù)實現(xiàn)方式不同)。


一般情況下,有了以上4個特性,這個網(wǎng)關(guān)就可以用了。

但是如果只有上面4個特性,我們用Nginx做為網(wǎng)關(guān)也是可以的,為什么還需要自己做網(wǎng)關(guān)?

因為我們的游戲網(wǎng)關(guān)還需要具備以下特殊功能:

特殊功能:

1. Session認證:即能維護客戶端是否登錄成功的狀態(tài),對于未登錄的請求,不予以轉(zhuǎn)發(fā),從而預(yù)防惡意攻擊。

2. 流量限流:游戲經(jīng)常會遇到DDOS攻擊,一個客戶端可以通過一個for循環(huán)一直給你發(fā)請求,所以必須進行限制。

3. 踢下線:游戲維護時,為了讓玩家能更新補丁,會將玩家踢下線,重新走一遍登錄流程,避免客戶端與服務(wù)端的數(shù)據(jù)不一致,造成顯示上的BUG。此外客服也需要經(jīng)常對一些違規(guī)的玩家進行踢下線處理。

4. 在線統(tǒng)計:為什么網(wǎng)關(guān)來做在線統(tǒng)計呢?因為只有它有所有的玩家連接信息,所以可以輕松統(tǒng)計當前有多少玩家在線。

5. 協(xié)議加密:為了避免客戶端的惡意攻擊,我們需要將請求進行加密,由于統(tǒng)一了入口,所以網(wǎng)關(guān)來做非常容易。

6. 心跳檢測:用于檢測客戶端是否已經(jīng)掉線,一般超過幾分鐘沒有收到心跳請求,則認為客戶端已經(jīng)掉線,直接請求登錄數(shù)據(jù),讓玩家重新走登錄流程。

集成以上的功能后,便形成了以下網(wǎng)關(guān)服務(wù)架構(gòu)圖:

網(wǎng)關(guān)服務(wù)架構(gòu)圖

這張圖中的路由控制,會根據(jù)不同游戲類型會有所變動,其中:

1. 后端服務(wù)路由表:維護了后端當前有哪些服務(wù)注冊到網(wǎng)關(guān)了,以及服務(wù)對應(yīng)哪些區(qū)服的配置信息。

2. 區(qū)服注冊表:維護了當前開了哪些區(qū)服及區(qū)服信息。

3. 終端管理:所有連接上網(wǎng)關(guān)的設(shè)備或進程都被認為是一個終端,終端會有一個編號,這個編號對應(yīng)后端服務(wù)編號或者玩家編號。當需要轉(zhuǎn)發(fā)消息給后端服務(wù)或客戶端時,就需要從終端管理里找到具體的連接進行消息發(fā)送。


接下來用圖示介紹一下,客戶端、網(wǎng)關(guān)服務(wù)器、后端服務(wù)器的交互流程:


客戶端與網(wǎng)關(guān)、后端服務(wù)的交互流程

Step1:客戶端連接網(wǎng)關(guān)服務(wù)器,然后發(fā)送登錄請求給網(wǎng)關(guān);

Step2:網(wǎng)關(guān)直接將登錄請求轉(zhuǎn)發(fā)給對應(yīng)區(qū)服的后端服務(wù)器進行登錄驗證;

Step3:后端服務(wù)器驗證成功后,會返回登錄信息給網(wǎng)關(guān);

Step4:網(wǎng)關(guān)會根據(jù)登錄信息維持一個Session映射,用于安全驗證和重登判斷,然后轉(zhuǎn)發(fā)登錄信息給客戶端;

Step5:客戶端收到登錄成功消息后,就可以發(fā)送業(yè)務(wù)請求給網(wǎng)關(guān)了;

Step6;網(wǎng)關(guān)收到業(yè)務(wù)請求后,會先判斷玩家是否登錄過,登錄過的才轉(zhuǎn)發(fā)給后端服務(wù)器,并且在協(xié)議頭增加玩家標記;

Step7:后端服務(wù)器收到業(yè)務(wù)請求后,根據(jù)協(xié)議頭的玩家標記,找到玩家的數(shù)據(jù)進行業(yè)務(wù)處理,然后返回給網(wǎng)關(guān);

Step8:網(wǎng)關(guān)收到業(yè)務(wù)回復(fù)后,直接返回給客戶端;

PS:上面涉及到的一些關(guān)鍵技術(shù)細節(jié),如:流量限流、協(xié)議加密,將會在后續(xù)的文章中詳細介紹算法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 網(wǎng)絡(luò)游戲的結(jié)構(gòu)分為客戶端與服務(wù)器端,客戶端采用2D繪制引擎或者3D繪制引擎繪制游戲世界的實時畫面,服務(wù)器端則負責響...
    java成功之路閱讀 2,485評論 1 11
  • 生日那天,買了蛋糕給喜歡熱鬧的自己,孤單的仿佛全世界就我一個,可誰不是人生路上獨自負重前行。 換季的時候,...
    April初心閱讀 517評論 1 0
  • 小明的感冒剛好,只是嗓子依然有痰,不時咳嗽,晚上尤其重,又一次還咳得吐起來。 美美中午又沒睡覺,傍晚時困得趴在地板...
    于洛閱讀 444評論 0 1
  • 好久沒寫日記了,每天總覺的睡不夠,吃了飯就想睡覺!兒子每天從托付回來總能自己看書,不用我嘮叨,就是作業(yè)寫的馬虎,不...
    凱峰媽媽閱讀 166評論 0 0

友情鏈接更多精彩內(nèi)容