游戲服務(wù)器,是一個(gè)會(huì)長(zhǎng)期運(yùn)行程序,并且它還要服務(wù)于多個(gè)不定時(shí),不定點(diǎn)的網(wǎng)絡(luò)請(qǐng)求。所以這類服務(wù)的特點(diǎn)是要特別關(guān)注穩(wěn)定性和性能。這類程序如果需要多個(gè)協(xié)作來提高承載能力,則還要關(guān)注部署和擴(kuò)容的便利性;同時(shí),還需要考慮如何實(shí)現(xiàn)某種程度容災(zāi)需求。由于多進(jìn)程協(xié)同工作,也帶來了開發(fā)的復(fù)雜度,這也是需要關(guān)注的問題。
對(duì)于游戲服務(wù)端架構(gòu),最重要的三個(gè)部分就是,如何使用CPU、內(nèi)存、網(wǎng)卡的設(shè)計(jì):
- 內(nèi)存架構(gòu):主要決定服務(wù)器如何使用內(nèi)存,以最大化利用服務(wù)器端內(nèi)存來提高承載量,降低服務(wù)延遲。
- 邏輯架構(gòu):設(shè)計(jì)如何使用進(jìn)程、線程、協(xié)程這些對(duì)于CPU調(diào)度的方案。選擇同步、異步等不同的編程模型,以提高服務(wù)器的穩(wěn)定性和承載量。可以分區(qū)分服,也可以采用世界服的方式,將相同功能模塊劃分到不同的服務(wù)器來處理。
- 通信模式:決定使用何種方式通訊。基于游戲類型不同采用不同的通信模式,比如http,tcp,udp等。
游戲類型
卡牌跑酷等休閑游戲弱交互游戲
分區(qū)分服RPG游戲(RPG頁(yè)游)
分服模型是游戲服務(wù)器中最典型,也是歷久最悠久的模型。在早期服務(wù)器的承載量達(dá)到上限的時(shí)候,游戲開發(fā)者就通過架設(shè)更多的服務(wù)器來解決。這樣提供了很多個(gè)游戲的“平行世界”,讓游戲中的人人之間的比較,產(chǎn)生了更多的空間。其特征是游戲服務(wù)器是一個(gè)個(gè)單獨(dú)的世界。每個(gè)服務(wù)器的帳號(hào)是獨(dú)立的,每臺(tái)服務(wù)器用戶的狀態(tài)都是不一樣的,一個(gè)服就是一個(gè)世界,大家各不牽扯。
后來游戲玩家呼吁要跨服打架,于是就出現(xiàn)了跨服戰(zhàn),再加上隨著游戲的運(yùn)行,單個(gè)服務(wù)器的游戲活躍玩家越來越少,所以后期就有了服務(wù)器的合并以及遷移,慢慢的以服務(wù)器的開放、合并形成了一套成熟的運(yùn)營(yíng)手段。目前多數(shù)游戲還采用分服的結(jié)構(gòu)來架設(shè)服務(wù)器,多數(shù)頁(yè)游還是采用這種模式。
數(shù)據(jù)共享游戲服務(wù)器
網(wǎng)關(guān)部分分離成單端的gate服務(wù)器,DB部分分離為DB服務(wù)器,把網(wǎng)絡(luò)功能單獨(dú)提取出來,讓用戶統(tǒng)一去連接一個(gè)網(wǎng)關(guān)服務(wù)器,再有網(wǎng)關(guān)服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù)到后端游戲服務(wù)器。而游戲服務(wù)器之間數(shù)據(jù)交換也統(tǒng)一連接到網(wǎng)管進(jìn)行交換。所有有DB交互的,都連接到DB服務(wù)器來代理處理。
場(chǎng)景服務(wù)器:它負(fù)責(zé)完成主要的游戲邏輯,這些邏輯包括:角色在游戲場(chǎng)景中的進(jìn)入與退出、角色的行走與跑動(dòng)、角色戰(zhàn)斗(包括打怪)、任務(wù)的認(rèn)領(lǐng)等。場(chǎng)景服務(wù)器設(shè)計(jì)的好壞是整個(gè)游戲世界服務(wù)器性能差異的主要體現(xiàn),它的設(shè)計(jì)難度不僅僅在于通信模型方面,更主要的是整個(gè)服務(wù)器的體系架構(gòu)和同步機(jī)制的設(shè)計(jì)。
非場(chǎng)景服務(wù)器:它主要負(fù)責(zé)完成與游戲場(chǎng)景不相關(guān)的游戲邏輯,這些邏輯不依靠游戲的地圖系統(tǒng)也能正常進(jìn)行,比如公會(huì)聊天或世界聊天,之所以把它從場(chǎng)景服務(wù)器中獨(dú)立出來,是為了節(jié)省場(chǎng)景服務(wù)器的CPU和帶寬資源,讓場(chǎng)景服務(wù)器能夠盡可能快地處理那些對(duì)游戲流暢性影響較大的游戲邏輯。
網(wǎng)關(guān)服務(wù)器: 在類型一種的架構(gòu)中,玩家在多個(gè)地圖跳轉(zhuǎn)或者場(chǎng)景切換的時(shí)候采用跳轉(zhuǎn)的模式,以此進(jìn)行跳轉(zhuǎn)不同的服務(wù)器。還有一種方式是把這些服務(wù)器的節(jié)點(diǎn)都通過網(wǎng)關(guān)服務(wù)器管理,玩家和網(wǎng)關(guān)服務(wù)器交互,每個(gè)場(chǎng)景或者服務(wù)器切換的時(shí)候,也有網(wǎng)關(guān)服務(wù)器統(tǒng)一來交換數(shù)據(jù),如此玩家操作會(huì)比較流暢。
房間游戲
房間類玩法和MMORPG有很大的不同,在于其在線廣播單元的不確定性和廣播數(shù)量很小。而且需要匹配一臺(tái)房間服務(wù)器讓少數(shù)人進(jìn)入一個(gè)服務(wù)器。
這一類游戲最重要的是其“游戲大廳”的承載量,每個(gè)“游戲房間”受邏輯所限,需要維持和廣播的玩家數(shù)據(jù)是有限的,但是“游戲大廳”需要維持相當(dāng)高的在線用戶數(shù),所以一般來說,這種游戲還是需要做“分服”的。典型的游戲就是《英雄聯(lián)盟》這一類游戲了。而“游戲大廳”里面最有挑戰(zhàn)性的任務(wù),就是“自動(dòng)匹配”玩家進(jìn)入一個(gè)“游戲房間”,這需要對(duì)所有在線玩家做搜索和過濾。
玩家先登錄“大廳服務(wù)器”,然后選擇組隊(duì)游戲的功能,服務(wù)器會(huì)通知參與的所有游戲客戶端,新開一條連接到房間服務(wù)器上,這樣所有參與的用戶就能在房間服務(wù)器里進(jìn)行游戲交互了。