中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

游戲服務(wù)器架構(gòu)演進(jìn)

2021-01-27    分類: 網(wǎng)站建設(shè)

一、游戲服務(wù)器特征

游戲服務(wù)器,是一個(gè)會(huì)長期運(yùn)行程序,并且它還要服務(wù)于多個(gè)不定時(shí),不定點(diǎn)的網(wǎng)絡(luò)請求。所以這類服務(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)注的問題。

功能約束,是架構(gòu)設(shè)計(jì)決定性因素?;谟螒驑I(yè)務(wù)的功能特征,對服務(wù)器端系統(tǒng)來說,有以下幾個(gè)特殊的需求:

  • 游戲和玩家的數(shù)據(jù)存儲(chǔ)落地
  • 對玩家交互數(shù)據(jù)進(jìn)行廣播和同步
  • 重要邏輯要在服務(wù)器上運(yùn)算,做好驗(yàn)證,防止外掛。

針對以上的需求特征,在服務(wù)器端,我們往往會(huì)關(guān)注對電腦內(nèi)存和CPU的使用,以求在特定業(yè)務(wù)代碼下,能盡量滿足高承載低響應(yīng)延遲的需求。最基本的做法就是“

MUD中文版

MUDOS使用單線程無阻塞套接字來服務(wù)所有玩家,所有玩家的請求都發(fā)到同一個(gè)線程去處理,主線程每隔1秒鐘更新一次所有對象(網(wǎng)絡(luò)收發(fā),對象狀態(tài),刷新地圖,刷新NPC)。用戶使用 Telnet之類的客戶端用 Tcp協(xié)議連接到 MUDOS上,使用純文字進(jìn)行游戲,每條指令用回車進(jìn)行分割。這樣的系統(tǒng)在當(dāng)時(shí)每臺服務(wù)器承載個(gè)4000人同時(shí)游戲。從1991年的 MUDOS發(fā)布后,全球各地都在為他改進(jìn),擴(kuò)充,推出新版本。

MUDOS中游戲內(nèi)容通過 LPC腳本進(jìn)行定制,邏輯處理采用單線程tick輪詢,這也是第一款服務(wù)端架構(gòu)模型,后來被應(yīng)用到不同游戲上。后續(xù)很多游戲都是跟《UO》一樣,直接在 MUDOS上進(jìn)行二次開發(fā),直到 如今,一些回合制游戲,以及對運(yùn)算量小的游戲,依然采用這種服務(wù)器架構(gòu)。

第一代服務(wù)器架構(gòu)圖:

分服模型是游戲服務(wù)器中最典型,也是歷久最悠久的模型。在早期服務(wù)器的承載量達(dá)到上限的時(shí)候,游戲開發(fā)者就通過架設(shè)更多的服務(wù)器來解決。這樣提供了很多個(gè)游戲的“平行世界”,讓游戲中的人人之間的比較,產(chǎn)生了更多的

二類型(cluster)

有了一類型的經(jīng)驗(yàn),后續(xù)肯定是拆分的越細(xì),性能越好,就類似現(xiàn)在微服務(wù),每個(gè)相同的模塊分布到一臺服務(wù)器處理,多組服務(wù)器集群共同組成一個(gè)游戲服務(wù)端。一般地,我們可以將一個(gè)組內(nèi)的服務(wù)器簡單地分成兩類:場景相關(guān)的(如:行走、戰(zhàn)斗等)以及場景不相關(guān)的(如:公會(huì)聊天、不受區(qū)域限制的貿(mào)易等)。經(jīng)??梢砸姷降囊环N方案是:gate服務(wù)器、場景服務(wù)器、非場景服務(wù)器、聊天管理器、AI服務(wù)器以及數(shù)據(jù)庫代理服務(wù)器。如下模型:

以上中我們簡單的講下常見服務(wù)器的三種類型功能:

場景服務(wù)器:它負(fù)責(zé)完成主要的游戲邏輯,這些邏輯包括:角色在游戲場景中的進(jìn)入與退出、角色的行走與跑動(dòng)、角色戰(zhàn)斗(包括打怪)、任務(wù)的認(rèn)領(lǐng)等。場景服務(wù)器設(shè)計(jì)的好壞是整個(gè)游戲世界服務(wù)器性能差異的主要體現(xiàn),它的設(shè)計(jì)難度不僅僅在于通信模型方面,更主要的是整個(gè)服務(wù)器的體系架構(gòu)和同步機(jī)制的設(shè)計(jì)。

非場景服務(wù)器:它主要負(fù)責(zé)完成與游戲場景不相關(guān)的游戲邏輯,這些邏輯不依靠游戲的地圖系統(tǒng)也能正常進(jìn)行,比如公會(huì)聊天或世界聊天,之所以把它從場景服務(wù)器中獨(dú)立出來,是為了節(jié)省場景服務(wù)器的CPU和帶寬資源,讓場景服務(wù)器能夠盡可能快地處理那些對游戲流暢性影響較大的游戲邏輯。

網(wǎng)關(guān)服務(wù)器: 在類型一種的架構(gòu)中,玩家在多個(gè)地圖跳轉(zhuǎn)或者場景切換的時(shí)候采用跳轉(zhuǎn)的模式,以此進(jìn)行跳轉(zhuǎn)不同的服務(wù)器。還有一種方式是把這些服務(wù)器的節(jié)點(diǎn)都通過網(wǎng)關(guān)服務(wù)器管理,玩家和網(wǎng)關(guān)服務(wù)器交互,每個(gè)場景或者服務(wù)器切換的時(shí)候,也有網(wǎng)關(guān)服務(wù)器統(tǒng)一來交換數(shù)據(jù),如此玩家操作會(huì)比較流暢。

通過這種類型服務(wù)器架構(gòu),因?yàn)閴毫Ψ稚⒘?,性能?huì)有明顯提升,負(fù)載也更大了,包括目前一些大型的 MMORPG游戲就是采用此架構(gòu)。不過每增加一級服務(wù)器,狀態(tài)機(jī)復(fù)雜度可能會(huì)翻倍,導(dǎo)致研發(fā)和找bug的成本上升,這個(gè)對開發(fā)組挑戰(zhàn)比較大,沒有經(jīng)驗(yàn),很容出錯(cuò)。

三類型(無縫地圖)

魔獸世界的中無縫地圖,想必大家印象深刻,整個(gè)世界的移動(dòng)沒有像以往的游戲一樣,在切換場景的時(shí)候需要loading等待,而是直接行走過去,體驗(yàn)流暢。

現(xiàn)在的游戲大地圖采用無縫地圖多數(shù)采用的是9宮格的樣式來處理,由于地圖沒有魔獸世紀(jì)那么大,所以采用單臺服務(wù)器多進(jìn)程處理即可,不過類似魔獸世界這種大世界地圖,必須考慮2個(gè)問題:

1、多個(gè)地圖節(jié)點(diǎn)如何無縫拼接,特別是當(dāng)?shù)貓D節(jié)點(diǎn)比較多的時(shí)候,如何保證無縫拼接

2、如何支持動(dòng)態(tài)分布,有些區(qū)域人多,有些區(qū)域人少,保證服務(wù)器資源利用的大化

為了解決這個(gè)問題,比較以往按照地圖來切割游戲而言,無縫世界并不存在一塊地圖上面的人有且只由一臺服務(wù)器處理了,此時(shí)需要一組服務(wù)器來處理,每臺 Node服務(wù)器用來管理一塊地圖區(qū)域,由 NodeMaster(NM)來為他們提供總體管理。更高層次的 World則提供大陸級別的管理服務(wù)。

一個(gè) Node所負(fù)責(zé)的區(qū)域,地理上沒必要連接在一起,可以統(tǒng)一交給一個(gè)Node去管理,而這些區(qū)塊在地理上并沒有聯(lián)系在一起的必要性。一個(gè) Node到底管理哪些區(qū)塊,可以根據(jù)游戲?qū)崟r(shí)運(yùn)行的負(fù)載情況,定時(shí)維護(hù)的時(shí)候進(jìn)行更改 NodeMaster 上面的配置。

對象的無縫遷移

玩家A、B、C分別代表3種不同的狀態(tài),以及不同的遷移方式,我們分別來看。

  • 玩家A: 玩家A在node1地圖服務(wù)器上,由node1控制,如果遷移到node2上,需要將其數(shù)據(jù)復(fù)制到node2上,然后從node1移除。
  • 玩家B: 玩家B在node1和node2中間,此時(shí)由node1和node2維護(hù),若是從node1行走到node2的過程中,會(huì)向1請求,同時(shí)向2請求,待全部移動(dòng)過去了再移除。
  • 玩家C:玩家C在node2地圖服務(wù)器上,由node2控制,如果遷移到node1上,需要將其數(shù)據(jù)復(fù)制到node1上,然后從node2移除。

具體魔獸世界服務(wù)器的分析,篇幅過多,我們以后再聊。

3、房間服務(wù)器(游戲大廳)

房間類玩法和MMORPG有很大的不同,在于其在線廣播單元的不確定性和廣播數(shù)量很小。而且需要匹配一臺房間服務(wù)器讓少數(shù)人進(jìn)入一個(gè)服務(wù)器。

這一類游戲最重要的是其“游戲大廳”的承載量,每個(gè)“游戲房間”受邏輯所限,需要維持和廣播的玩家數(shù)據(jù)是有限的,但是“游戲大廳”需要維持相當(dāng)高的在線用戶數(shù),所以一般來說,這種游戲還是需要做“分服”的。典型的游戲就是《英雄聯(lián)盟》這一類游戲了。而“游戲大廳”里面最有挑戰(zhàn)性的任務(wù),就是“自動(dòng)匹配”玩家進(jìn)入一個(gè)“游戲房間”,這需要對所有在線玩家做搜索和過濾。

玩家先登錄“大廳服務(wù)器”,然后選擇組隊(duì)游戲的功能,服務(wù)器會(huì)通知參與的所有游戲客戶端,新開一條連接到房間服務(wù)器上,這樣所有參與的用戶就能在房間服務(wù)器里進(jìn)行游戲交互了。

以上就是目前游戲服務(wù)器的演化進(jìn)程,由于所涉及的內(nèi)容太多,關(guān)于服務(wù)器的相關(guān)網(wǎng)絡(luò)IO以及內(nèi)存模型都沒有介紹,以后有機(jī)會(huì)再具體講講這一部分。

分享名稱:游戲服務(wù)器架構(gòu)演進(jìn)
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/news/97630.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作用戶體驗(yàn)、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)公司、小程序開發(fā)、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
清远市| 黔西县| 宜兴市| 兴文县| 黔江区| 湖口县| 西贡区| 金川县| 枣庄市| 定远县| 冕宁县| 马关县| 德惠市| 昌都县| 台山市| 永昌县| 岳普湖县| 肥东县| 若羌县| 方正县| 米脂县| 宜春市| 兴安盟| 卓尼县| 花莲市| 甘洛县| 通化市| 哈尔滨市| 巴南区| 城固县| 罗田县| 新安县| 志丹县| 元氏县| 博乐市| 长宁县| 朔州市| 随州市| 泌阳县| 文山县| 阿巴嘎旗|