?網(wǎng)絡(luò)游戲的結(jié)構(gòu)分為客戶端與服務(wù)器端,客戶端采用2D繪制引擎或者3D繪制引擎繪制游戲世界的實時畫面仁讨,服務(wù)器端則負責(zé)響應(yīng)所有客戶端的連接請求和游戲邏輯處理,并控制所有客戶端的游戲畫面繪制实昨《椿恚客戶端與服務(wù)器通過網(wǎng)絡(luò)數(shù)據(jù)包交互完成每一步游戲邏輯,由于游戲邏輯是由服務(wù)器負責(zé)處理的荒给,要保證面對海量用戶登錄時丈挟,游戲具有良好的流暢性和用戶體驗,優(yōu)秀的服務(wù)器架構(gòu)起到了關(guān)鍵的作用志电。
1 服務(wù)器架構(gòu)設(shè)計
1.1 服務(wù)器架構(gòu)分類
? ? ? ?服務(wù)器組的架構(gòu)一般分為兩種:第一種是帶網(wǎng)關(guān)服務(wù)器的服務(wù)器架構(gòu)曙咽;第二種是不帶網(wǎng)關(guān)服務(wù)器的服務(wù)器架構(gòu),這兩種方案各有利弊挑辆。在給出服務(wù)器架構(gòu)設(shè)計之前桐绒,先對這兩種設(shè)計方案進行詳細的探討夺脾。
所謂網(wǎng)關(guān)服務(wù)器,其實是Gate服務(wù)器茉继,比如LoginGate咧叭、GameGate等。網(wǎng)關(guān)服務(wù)器的主要職責(zé)是將客戶端和游戲服務(wù)器隔離烁竭,客戶端程序直接與這些網(wǎng)關(guān)服務(wù)器通信菲茬,并不需要知道具體的游戲服務(wù)器內(nèi)部架構(gòu),包括它們的IP派撕、端口婉弹、網(wǎng)絡(luò)通信模型(完成端口或Epoll)等≈蘸穑客戶端只與網(wǎng)關(guān)服務(wù)器相連镀赌,通過網(wǎng)關(guān)服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù)包間接地與游戲服務(wù)器交互。同樣地际跪,游戲服務(wù)器也不直接和客戶端通信商佛,發(fā)給客戶端的協(xié)議都通過網(wǎng)關(guān)服務(wù)器進行轉(zhuǎn)發(fā)。
1.2 服務(wù)器架構(gòu)設(shè)計
根據(jù)網(wǎng)絡(luò)游戲的規(guī)模和設(shè)計的不同姆打,每組服務(wù)器中服務(wù)器種類和數(shù)量是不盡相同的良姆。本文設(shè)計出的帶網(wǎng)關(guān)服務(wù)器的服務(wù)器組架構(gòu)如圖1所示。
本文將服務(wù)器設(shè)計成帶網(wǎng)關(guān)服務(wù)器的架構(gòu)幔戏,雖然加大了服務(wù)器的設(shè)計復(fù)雜度玛追,但卻帶來了以下幾點好處:
(1)作為網(wǎng)絡(luò)通信的中轉(zhuǎn)站,負責(zé)維護將內(nèi)網(wǎng)和外網(wǎng)隔離開闲延,使外部無法直接訪問內(nèi)部服務(wù)器痊剖,保障內(nèi)網(wǎng)服務(wù)器的安全,一定程度上較少外掛的攻擊垒玲。
(2)網(wǎng)關(guān)服務(wù)器負責(zé)解析數(shù)據(jù)包邢笙、加解密、超時處理和一定邏輯處理侍匙,這樣可以提前過濾掉錯誤包和非法數(shù)據(jù)包氮惯。
(3)客戶端程序只需建立與網(wǎng)關(guān)服務(wù)器的連接即可進入游戲,無需與其它游戲服務(wù)器同時建立多條連接想暗,節(jié)省了客戶端和服務(wù)器程序的網(wǎng)絡(luò)資源開銷妇汗。
(4)在玩家跳服務(wù)器時,不需要斷開與網(wǎng)關(guān)服務(wù)器的連接说莫,玩家數(shù)據(jù)在不同游戲服務(wù)器間的切換是內(nèi)網(wǎng)切換杨箭,切換工作瞬間完成,玩家?guī)缀醪煊X不到储狭,這保證了游戲的流暢性和良好的用戶體驗互婿。
? ? ? ?在享受網(wǎng)關(guān)服務(wù)器帶來上述好處的同時捣郊,還需注意以下可能導(dǎo)致負面效果的兩個情況:如何避免網(wǎng)關(guān)服務(wù)器成為高負載情況下的通訊瓶頸問題以及由于網(wǎng)關(guān)的單節(jié)點故障導(dǎo)致整組服務(wù)器無法對外提供服務(wù)的問題。上述兩個問題可以采用“多網(wǎng)關(guān)” 技術(shù)加以解決慈参。顧名思義呛牲,“多網(wǎng)關(guān)” 就是同時存在多個網(wǎng)關(guān)服務(wù)器,比如一組服務(wù)器可以配置三臺GameGate驮配。當負載較大時娘扩,可以通過增加網(wǎng)關(guān)服務(wù)器來增加網(wǎng)關(guān)的總體通訊流量,當一臺網(wǎng)關(guān)服務(wù)器宕機時壮锻,它只會影響連接到本服務(wù)器的客戶端琐旁,其它客戶端不會受到任何影響。
? ? ? ?從圖1的服務(wù)器架構(gòu)圖可以看出猜绣,一組服務(wù)器包括LoginGate灰殴、LoginServer、GameGate掰邢、GameServer牺陶、DBServer和MServer等多種服務(wù)器。LoginGate和GameGate就是網(wǎng)關(guān)服務(wù)器尸变,一般一組服務(wù)器會配置3臺GameGate义图,因為穩(wěn)定性對于網(wǎng)絡(luò)游戲運營來說是至關(guān)重要的减俏,而服務(wù)器宕機等突發(fā)事件是游戲運營中所面臨的潛在風(fēng)險召烂,配置多臺服務(wù)器可以有效地降低單個服務(wù)器宕機帶來的風(fēng)險。另外娃承,配置多臺網(wǎng)關(guān)服務(wù)器也是進行負載均衡的有效手段之一奏夫。下面將對各種服務(wù)器的主要功能和彼此之間的數(shù)據(jù)交互做詳細解釋。
(1)LoginGate
? ? ? ?LoginGate主要負責(zé)在玩家登錄時維護客戶端與LoginServer之間的網(wǎng)絡(luò)連接與通訊历筝,對LoginServer和客戶端的通信數(shù)據(jù)進行加解密酗昼、校驗。
(2)LoginServer
? ? ? ?LoginServer主要功能是驗證玩家的賬號是否合法梳猪,只有通過驗證的賬號才能登錄游戲麻削。從架構(gòu)圖可以看出, DBServer和GameServer會連接LoginServer春弥。玩家登錄基本流程是呛哟,客戶端發(fā)送賬號和密碼到LoginServer驗證,如果驗證通過匿沛,LoginServer會給玩家分配一個SessionKey扫责,LoginServer會把這個SessionKey發(fā)送給客戶端、DBServer和GameServer逃呼,在后續(xù)的選擇角色以后進入游戲過程中鳖孤,DBServer和GameServer將驗證SessionKey合法性者娱,如果和客戶端攜帶的SessionKey不一致,將無法成功獲取到角色或者進入游戲苏揣。
(3)GameGate
? ? ? ?GameGate(GG)主要負責(zé)在用戶游戲過程中負責(zé)維持GS與客戶端之間的網(wǎng)絡(luò)連接和通訊黄鳍,對GS和客戶端的通信數(shù)據(jù)進行加解密和校驗,對客戶端發(fā)往GS的用戶數(shù)據(jù)進行解析腿准,過濾錯誤包际起,對客戶端發(fā)來的一些協(xié)議作簡單的邏輯處理,其中包括游戲邏輯中的一些超時判斷吐葱。在用戶選擇角色過程中負責(zé)維持DBServer與客戶端之間的網(wǎng)絡(luò)連接和通訊街望,對DBServer和客戶端的通信數(shù)據(jù)進行加解密和校驗,對客戶端發(fā)往DBServer的用戶數(shù)據(jù)做簡單的分析弟跑。維持客戶端與MServer之間的網(wǎng)絡(luò)連接與通訊灾前、加解密、數(shù)據(jù)轉(zhuǎn)發(fā)和簡單的邏輯處理等孟辑。
(4)GameServer
? ? ? ?GameServer(GS)主要負責(zé)游戲邏輯處理哎甲。網(wǎng)絡(luò)游戲有龐大世界觀背景,絢麗激烈的陣營對抗以及完備的裝備和技能體系饲嗽。目前炭玫,網(wǎng)絡(luò)游戲主要包括任務(wù)系統(tǒng)、聲望系統(tǒng)貌虾、玩家PK吞加、寵物系統(tǒng)、擺攤系統(tǒng)尽狠、行會系統(tǒng)衔憨、排名系統(tǒng)、副本系統(tǒng)袄膏、生產(chǎn)系統(tǒng)和寶石系統(tǒng)等践图。從軟件架構(gòu)角度來看,這些系統(tǒng)可以看著GS的子系統(tǒng)或模塊沉馆,它們共同處理整個游戲世界邏輯的運算码党。游戲邏輯包括角色進入與退出游戲、跳GS以及各種邏輯動作(比如行走斥黑、跑動揖盘、說話和攻擊等)。
? ? ? ?由于整個游戲世界有許多游戲場景心赶,在該架構(gòu)中一組服務(wù)器有3臺GS共同負責(zé)游戲邏輯處理扣讼,每臺游戲服務(wù)器負責(zé)一部分地圖的處理,這樣不僅降低了單臺服務(wù)器的負載缨叫,而且降低了GS宕機帶來的風(fēng)險椭符。玩家角色信息里會保持玩家上次退出游戲時的地圖編號和所在GS編號荔燎,這樣玩家再次登錄時,會進入到上次退出時的GS销钝。
? ? ? ?上面提到過有咨,在驗證賬號之后,LoginServer會把這個SessionKey 發(fā)給GS蒸健,當玩家選擇角色登錄GS時座享,會把SessionKey一起發(fā)給GS,這時GS會驗證SessionKey是否與其保存的相一致似忧,不一致的話GS會拒絕玩家進入游戲渣叛。MServer的主要負責(zé)GS之間的數(shù)據(jù)轉(zhuǎn)發(fā)以及數(shù)據(jù)廣播,另外盯捌,一些系統(tǒng)也可以放到MServer上淳衙,這樣也可以減輕GS的運算壓力。
(5)DBServer
? ? ? ?DBServer主要的功能是緩存玩家角色數(shù)據(jù)饺著,保證角色數(shù)據(jù)能快速的讀取和保存箫攀。由于角色數(shù)據(jù)量是比較大的川尖,包括玩家的等級拍嵌、經(jīng)驗、生命值羞延、魔法值渡嚣、裝備梢睛、技能、好友严拒、公會等扬绪。如果每次GS獲取角色數(shù)據(jù)都去讀數(shù)據(jù)庫竖独,效率必然非常低下裤唠,用DBServer緩存角色數(shù)據(jù)之后,極大地提高了數(shù)據(jù)請求的響應(yīng)速度莹痢。
? ? ? ?LoginServer會在玩家選組時把SessionKey發(fā)給DBServer种蘸,當玩家發(fā)送獲取角色信息協(xié)議時會帶上這個SessionKey,如果跟DBServer保存的SessionKey不一致竞膳,則DBServer會認為玩家不是合法用戶航瞭,獲取角色協(xié)議將會失敗。另外坦辟,玩家選取角色正式進入游戲時刊侯,GS會給DBServer發(fā)送攜帶SessionKey的獲取角色信息協(xié)議,這時DBServer同樣會驗證SessionKey的合法性锉走”醭梗總之藕届,只有客戶端、DBServer和GS所保存的SessionKey一致亭饵,才能保證協(xié)議收到成功反饋休偶。
? ? ? ?與DBServer通訊的服務(wù)器主要有GG,GS和LoginServer辜羊,DBServer與GG交互的協(xié)議主要包括列角色踏兜、創(chuàng)建角色、刪除角色八秃、恢復(fù)角色等碱妆,DBServer與GS交互的協(xié)議包括讀取角色數(shù)據(jù)、保存角色數(shù)據(jù)和跳服務(wù)器等昔驱,DBServer與LoginServer交互的協(xié)議主要是用戶登錄協(xié)議山橄,這時候會給DBServer發(fā)送SessionKey。
(6)MServer
? ? ? ?每一個組有一臺MServer舍悯,主要負責(zé)維持3臺GS之間數(shù)據(jù)的轉(zhuǎn)發(fā)和數(shù)據(jù)廣播航棱。另外一些游戲系統(tǒng)也可能會放到MServer上處理,比如行會系統(tǒng)萌衬。
1.3 服務(wù)器交互的主要流程
? ? ? ?下面給出服務(wù)器之間數(shù)據(jù)通訊的主要流程從這些流程能看出各種服務(wù)器之間是如何數(shù)據(jù)交互和協(xié)同工作的饮醇。
? ? ? ?圖2的流程說明了,在選角色過程中秕豫,客戶端會把攜帶游戲賬號和SessionKey的選角色協(xié)議發(fā)給GG朴艰,GG做一些簡單處理之后轉(zhuǎn)發(fā)給DBServer,DBServer要驗證SessionKey的合法性混移,驗證通過之后祠墅,DBServer會從角色信息緩沖區(qū)里取出該賬戶的所有角色信息發(fā)給客戶端。這個過程在客戶端的表現(xiàn)是歌径,當選擇好服務(wù)器組之后毁嗦,客戶端會直接顯示該賬號下的所有角色,之后就可以選擇角色進入游戲了回铛。
? ? ? ?圖3的流程說明了狗准,在玩家選角色正式進入游戲時,客戶端會把攜帶游戲賬號茵肃、角色ID和SessionKey的登錄協(xié)議發(fā)給GG腔长,GG做一些簡單處理之后轉(zhuǎn)發(fā)給GS。GS會驗證SessionKey的合法性验残,驗證通過之后捞附,GS會把驗證通過的結(jié)果發(fā)給客戶端,同時GS給DBServer發(fā)獲取角色數(shù)據(jù)的協(xié)議,這些角色數(shù)據(jù)是一個玩家所有的游戲數(shù)據(jù)鸟召,包括裝備想鹰、技能等等。
? ? ? ?圖4的流程說明了药版,在玩家游戲過程辑舷,客戶端把邏輯協(xié)議(包括走、說話槽片、跑何缓、使用技能等)發(fā)給GG,GG完成加解密和簡單邏輯處理之后轉(zhuǎn)發(fā)給GS还栓,GS負責(zé)這些協(xié)議的主要
邏輯處理碌廓。
2 總結(jié)
? ? ? ?網(wǎng)絡(luò)游戲服務(wù)器的架構(gòu)設(shè)計已經(jīng)成為當前網(wǎng)絡(luò)游戲研究領(lǐng)域的熱點,因為高性能服務(wù)器架構(gòu)設(shè)計是一款網(wǎng)絡(luò)游戲成功的關(guān)鍵剩盒。本文從實際應(yīng)用出發(fā)谷婆,提出了一種高性能的服務(wù)器架構(gòu)設(shè)計解決方案,并且詳細探討了各種服務(wù)器的功能辽聊,本文的最后給出了幾個服務(wù)器之間數(shù)據(jù)通訊的關(guān)鍵流程纪挎,以圖文并茂的方式解釋各個服務(wù)器是如何協(xié)同工作的。