2021-01-27 分類: 網站建設
一、游戲服務器特征
游戲服務器,是一個會長期運行程序,并且它還要服務于多個不定時,不定點的網絡請求。所以這類服務的特點是要特別關注穩定性和性能。這類程序如果需要多個協作來提高承載能力,則還要關注部署和擴容的便利性;同時,還需要考慮如何實現某種程度容災需求。由于多進程協同工作,也帶來了開發的復雜度,這也是需要關注的問題。
功能約束,是架構設計決定性因素。基于游戲業務的功能特征,對服務器端系統來說,有以下幾個特殊的需求:
針對以上的需求特征,在服務器端,我們往往會關注對電腦內存和CPU的使用,以求在特定業務代碼下,能盡量滿足高承載低響應延遲的需求。最基本的做法就是“
MUD中文版
MUDOS使用單線程無阻塞套接字來服務所有玩家,所有玩家的請求都發到同一個線程去處理,主線程每隔1秒鐘更新一次所有對象(網絡收發,對象狀態,刷新地圖,刷新NPC)。用戶使用 Telnet之類的客戶端用 Tcp協議連接到 MUDOS上,使用純文字進行游戲,每條指令用回車進行分割。這樣的系統在當時每臺服務器承載個4000人同時游戲。從1991年的 MUDOS發布后,全球各地都在為他改進,擴充,推出新版本。
MUDOS中游戲內容通過 LPC腳本進行定制,邏輯處理采用單線程tick輪詢,這也是第一款服務端架構模型,后來被應用到不同游戲上。后續很多游戲都是跟《UO》一樣,直接在 MUDOS上進行二次開發,直到 如今,一些回合制游戲,以及對運算量小的游戲,依然采用這種服務器架構。
第一代服務器架構圖:
分服模型是游戲服務器中最典型,也是歷久最悠久的模型。在早期服務器的承載量達到上限的時候,游戲開發者就通過架設更多的服務器來解決。這樣提供了很多個游戲的“平行世界”,讓游戲中的人人之間的比較,產生了更多的
二類型(cluster)
有了一類型的經驗,后續肯定是拆分的越細,性能越好,就類似現在微服務,每個相同的模塊分布到一臺服務器處理,多組服務器集群共同組成一個游戲服務端。一般地,我們可以將一個組內的服務器簡單地分成兩類:場景相關的(如:行走、戰斗等)以及場景不相關的(如:公會聊天、不受區域限制的貿易等)。經常可以見到的一種方案是:gate服務器、場景服務器、非場景服務器、聊天管理器、AI服務器以及數據庫代理服務器。如下模型:
以上中我們簡單的講下常見服務器的三種類型功能:
場景服務器:它負責完成主要的游戲邏輯,這些邏輯包括:角色在游戲場景中的進入與退出、角色的行走與跑動、角色戰斗(包括打怪)、任務的認領等。場景服務器設計的好壞是整個游戲世界服務器性能差異的主要體現,它的設計難度不僅僅在于通信模型方面,更主要的是整個服務器的體系架構和同步機制的設計。
非場景服務器:它主要負責完成與游戲場景不相關的游戲邏輯,這些邏輯不依靠游戲的地圖系統也能正常進行,比如公會聊天或世界聊天,之所以把它從場景服務器中獨立出來,是為了節省場景服務器的CPU和帶寬資源,讓場景服務器能夠盡可能快地處理那些對游戲流暢性影響較大的游戲邏輯。
網關服務器: 在類型一種的架構中,玩家在多個地圖跳轉或者場景切換的時候采用跳轉的模式,以此進行跳轉不同的服務器。還有一種方式是把這些服務器的節點都通過網關服務器管理,玩家和網關服務器交互,每個場景或者服務器切換的時候,也有網關服務器統一來交換數據,如此玩家操作會比較流暢。
通過這種類型服務器架構,因為壓力分散了,性能會有明顯提升,負載也更大了,包括目前一些大型的 MMORPG游戲就是采用此架構。不過每增加一級服務器,狀態機復雜度可能會翻倍,導致研發和找bug的成本上升,這個對開發組挑戰比較大,沒有經驗,很容出錯。
三類型(無縫地圖)
魔獸世界的中無縫地圖,想必大家印象深刻,整個世界的移動沒有像以往的游戲一樣,在切換場景的時候需要loading等待,而是直接行走過去,體驗流暢。
現在的游戲大地圖采用無縫地圖多數采用的是9宮格的樣式來處理,由于地圖沒有魔獸世紀那么大,所以采用單臺服務器多進程處理即可,不過類似魔獸世界這種大世界地圖,必須考慮2個問題:
1、多個地圖節點如何無縫拼接,特別是當地圖節點比較多的時候,如何保證無縫拼接
2、如何支持動態分布,有些區域人多,有些區域人少,保證服務器資源利用的大化
為了解決這個問題,比較以往按照地圖來切割游戲而言,無縫世界并不存在一塊地圖上面的人有且只由一臺服務器處理了,此時需要一組服務器來處理,每臺 Node服務器用來管理一塊地圖區域,由 NodeMaster(NM)來為他們提供總體管理。更高層次的 World則提供大陸級別的管理服務。
一個 Node所負責的區域,地理上沒必要連接在一起,可以統一交給一個Node去管理,而這些區塊在地理上并沒有聯系在一起的必要性。一個 Node到底管理哪些區塊,可以根據游戲實時運行的負載情況,定時維護的時候進行更改 NodeMaster 上面的配置。
對象的無縫遷移
玩家A、B、C分別代表3種不同的狀態,以及不同的遷移方式,我們分別來看。
具體魔獸世界服務器的分析,篇幅過多,我們以后再聊。
3、房間服務器(游戲大廳)
房間類玩法和MMORPG有很大的不同,在于其在線廣播單元的不確定性和廣播數量很小。而且需要匹配一臺房間服務器讓少數人進入一個服務器。
這一類游戲最重要的是其“游戲大廳”的承載量,每個“游戲房間”受邏輯所限,需要維持和廣播的玩家數據是有限的,但是“游戲大廳”需要維持相當高的在線用戶數,所以一般來說,這種游戲還是需要做“分服”的。典型的游戲就是《英雄聯盟》這一類游戲了。而“游戲大廳”里面最有挑戰性的任務,就是“自動匹配”玩家進入一個“游戲房間”,這需要對所有在線玩家做搜索和過濾。
玩家先登錄“大廳服務器”,然后選擇組隊游戲的功能,服務器會通知參與的所有游戲客戶端,新開一條連接到房間服務器上,這樣所有參與的用戶就能在房間服務器里進行游戲交互了。
以上就是目前游戲服務器的演化進程,由于所涉及的內容太多,關于服務器的相關網絡IO以及內存模型都沒有介紹,以后有機會再具體講講這一部分。
網頁標題:游戲服務器架構演進
轉載來源:http://m.newbst.com/news30/97630.html
成都網站建設公司_創新互聯,為您提供用戶體驗、定制開發、虛擬主機、商城網站、網站排名、網站維護
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容