1. 程式人生 > >遊戲伺服器的常用架構

遊戲伺服器的常用架構

遊戲伺服器,是一個會長期執行程式,並且它還要服務於多個不定時,不定點的網路請求。所以這類服務的特點是要特別關注穩定性和效能。這類程式如果需要多個協作來提高承載能力,則還要關注部署和擴容的便利性;同時,還需要考慮如何實現某種程度容災需求。由於多程序協同工作,也帶來了開發的複雜度,這也是需要關注的問題。

遊戲伺服器架構要素

對於遊戲服務端架構,最重要的三個部分就是,如何使用CPU、記憶體、網絡卡的設計:
- 記憶體架構:主要決定伺服器如何使用記憶體,以最大化利用伺服器端記憶體來提高承載量,降低服務延遲。
- 邏輯架構:設計如何使用程序、執行緒、協程這些對於CPU排程的方案。選擇同步、非同步等不同的程式設計模型,以提高伺服器的穩定性和承載量。可以分割槽分服,也可以採用世界服的方式,將相同功能模組劃分到不同的伺服器來處理。
- 通訊模式:決定使用何種方式通訊。基於遊戲型別不同採用不同的通訊模式,比如http,tcp,udp等。

遊戲型別

卡牌跑酷等休閒遊戲弱互動遊戲

分割槽分服RPG遊戲(RPG頁遊)

分服模型是遊戲伺服器中最典型,也是歷久最悠久的模型。在早期伺服器的承載量達到上限的時候,遊戲開發者就通過架設更多的伺服器來解決。這樣提供了很多個遊戲的“平行世界”,讓遊戲中的人人之間的比較,產生了更多的空間。其特徵是遊戲伺服器是一個個單獨的世界。每個伺服器的帳號是獨立的,每臺伺服器使用者的狀態都是不一樣的,一個服就是一個世界,大家各不牽扯。
後來遊戲玩家呼籲要跨服打架,於是就出現了跨服戰,再加上隨著遊戲的執行,單個伺服器的遊戲活躍玩家越來越少,所以後期就有了伺服器的合併以及遷移,慢慢的以伺服器的開放、合併形成了一套成熟的運營手段。目前多數遊戲還採用分服的結構來架設伺服器,多數頁遊還是採用這種模式。

資料共享遊戲伺服器


閘道器部分分離成單端的gate伺服器,DB部分分離為DB伺服器,把網路功能單獨提取出來,讓使用者統一去連線一個閘道器伺服器,再有閘道器伺服器轉發資料到後端遊戲伺服器。而遊戲伺服器之間資料交換也統一連線到網管進行交換。所有有DB互動的,都連線到DB伺服器來代理處理。

  • 場景伺服器:它負責完成主要的遊戲邏輯,這些邏輯包括:角色在遊戲場景中的進入與退出、角色的行走與跑動、角色戰鬥(包括打怪)、任務的認領等。場景伺服器設計的好壞是整個遊戲世界伺服器效能差異的主要體現,它的設計難度不僅僅在於通訊模型方面,更主要的是整個伺服器的體系架構和同步機制的設計。
  • 非場景伺服器:它主要負責完成與遊戲場景不相關的遊戲邏輯,這些邏輯不依靠遊戲的地圖系統也能正常進行,比如公會聊天或世界聊天,之所以把它從場景伺服器中獨立出來,是為了節省場景伺服器的CPU和頻寬資源,讓場景伺服器能夠儘可能快地處理那些對遊戲流暢性影響較大的遊戲邏輯。
  • 閘道器伺服器: 在型別一種的架構中,玩家在多個地圖跳轉或者場景切換的時候採用跳轉的模式,以此進行跳轉不同的伺服器。還有一種方式是把這些伺服器的節點都通過閘道器伺服器管理,玩家和閘道器伺服器互動,每個場景或者伺服器切換的時候,也有閘道器伺服器統一來交換資料,如此玩家操作會比較流暢。

房間遊戲


房間類玩法和MMORPG有很大的不同,在於其線上廣播單元的不確定性和廣播數量很小。而且需要匹配一臺房間伺服器讓少數人進入一個伺服器。
這一類遊戲最重要的是其“遊戲大廳”的承載量,每個“遊戲房間”受邏輯所限,需要維持和廣播的玩家資料是有限的,但是“遊戲大廳”需要維持相當高的線上使用者數,所以一般來說,這種遊戲還是需要做“分服”的。典型的遊戲就是《英雄聯盟》這一類遊戲了。而“遊戲大廳”裡面最有挑戰性的任務,就是“自動匹配”玩家進入一個“遊戲房間”,這需要對所有線上玩家做搜尋和過濾。
玩家先登入“大廳伺服器”,然後選擇組隊遊戲的功能,伺服器會通知參與的所有遊戲客戶端,新開一條連線到房間伺服器上,這樣所有參與的使用者就能在房間伺服器裡進行遊戲互動了。