mmorpg arpg fps等遊戲服務端如何設計?
01-29
遊戲新手,在提這個問題之前,也了解過一些網路遊戲的同步規則。
一般就是伺服器為主,客戶端只提交操作給服務端,並接受伺服器的反饋信息顯示在畫面上。這裡面考慮到有延時所以採用客戶端預測和服務端的滯後補償。比如cs。或者幀同步,每一幀客戶端發送給服務端等服務端返回數據,客戶端才進行對應操作,否則客戶端就卡住。如魔獸爭霸。以上的這些策略,由於都是信任服務端,所以各種操作判斷都在服務端進行。比如碰撞檢測,這就要求服務端建立了整個遊戲世界的模型吧才能進行吧(類似運行了一個無畫面的遊戲程序)。
像cs魔獸爭霸這種我能理解,聯機人數也就那麼幾個,某一台機子一邊自己跑著遊戲一邊處理其他客戶端數據。但是類似《地下城與勇士》這種呢?每開一個副本或者一個pvp,伺服器都要對應建立一個副本世界?dnf最高同時在線是300W吧,不知道他的伺服器有多少,應該也就千台規模。我自己電腦開遊戲雙開都卡,難以想像服務端同時運行那麼多客戶端的情況。所以類似《dnf》這種怎麼做到碰撞檢測又精確,伺服器響應速度又快呢?還有mmorpg,服務端如果也是這樣模擬了整個世界的話,光是那些場景就能把伺服器內存撐爆了吧,還不算遊戲物體的各種事件計算、碰撞判定,cpu也吃不消啊。
@孟亮 說的對,一般棋牌遊戲單台伺服器支持個2萬人沒什麼問題,回合RPG支持1萬人沒什麼問題,ARPG支持個6千人沒什麼問題,動作遊戲支持個4千人沒什麼問題。
大型mmo的服務端碰撞是抽象成相對簡單的數據結構的不是客戶端那麼精確的模型碰撞 比如多層的二維數組格子 魔獸世界不是幀同步而是客戶端先行的伺服器驗證也不是很精確不然也不會有飛天加速掛了 dnf那種類似開房間的遊戲做法不同於大型mmo 伺服器處理大量抽象數據的能力很強的 而且都是分散式的 不是你想像那樣一台計算機 一般單個cpu只跑一個進程 單個進程只負載一部分人 比如九陰單個進程負載2000人 一台標準多核心伺服器可以負載很多個進程 多台伺服器可以負載更多的進程 剩下的就是進程之間的通信和數據切換問題了
1. 客戶端需要做模型碰撞, 但是伺服器一般情況下無需做3D碰撞. 為了效率, 伺服器會通過3D地形, 離線生成2D的可行走區域. 但魔獸因為這個原因, 出了一些作弊, 所以聽說後面好像有檢查高度. 但絕對不會把世界的模型載入到內存. 沒有必要.
2. 副本的英文就是Instance, 當然是在伺服器開一個副本實例. 副本有助於分散式預算, 比世界地圖邏輯好處理
3. 伺服器跑的是純邏輯, 不跑圖形API的. 別用雙開和伺服器上萬連接來比
伺服器的內存不是民用機器可以想得通的. 另外, 帶寬, CPU也是恐怖級別的. 但是想在單台機器承載幾百萬人是不能達到的.
一般使用集群來處理. 原理基於: 互相沒有關係的角色, 沒必要必須在一個伺服器進程內4. 你相信DNF有部分採用客戶端運算么? 因為如此, 所以才會有外掛. 那麼精準的碰撞, 伺服器無法做到實時同步. 當然有些運算靠客戶端完成
伺服器都是數字的世界, 沒有圖形每開一個副本肯定要創建一個副本世界的。但是你如果多個副本放一個線程內,其實也就一塊描述副本狀態的數據結構而已。比都呆野外更省資源,因為看到的人限於同副本的,狀態同步量要少於野戰。
dnf是韓國的,可以做到發個封包全屏秒殺的外掛,所以估計服務端完全沒檢測。
我補充一下,現在許多主流的arpg,對攻擊判定的要求很嚴格的那種,都是以單機遊戲為基礎,有聯機內容的時候(就我所知)大多數是採用P2P連接,把攻擊判定交給本地計算,伺服器只負責匹配。
MMORPG服務端肯定要負責模擬了整個遊戲世界,只是方法很巧妙,伺服器消耗的資源在可接受範圍之內,做過MMORPG伺服器端和客戶端整體架構的人就知道其中的實現內幕。
在伺服器端如果需要完成人多同服任務,就一個動態負載均衡完美解決掉。
推薦閱讀:
※1.71陸戰地圖變化/分析
※和外國人打網遊要知道哪些遊戲術語?
※那個尋找父親當年魔獸世界足跡的少年,找到了
※為什麼DNF這種畫面不好,打擊感不夠,伺服器不行的網遊還會有挺多的人在玩而且頻繁的投錢呢?