遊戲伺服器可不可以可以只做資料中轉站

hkidc2019發表於2019-11-18

首先,其實在遠古時期,大部分的網遊都是這樣做。因為那時候伺服器機能普遍不強,大環境的網路不好(都是撥號上網),如果像現在這樣,伺服器運算完再返回結果給前端,成本就過高。伺服器hold不住,玩家的網費也燒得飛起。所以初期的網遊,大部分單人邏輯和運算都交給客戶端來做,伺服器只負責儲存和廣播。如果你能搞到初代的石器時代或者傳奇之類的原始碼,你就會發現基本所有單人部分的運算都是在前端完成。至於後來為什麼都交給後端來做,答案很簡單,就是外掛。如果是單機的話,你改改資料自嗨沒人管你,但是網遊就不太可能了其次,其實現在還有部分網遊也會這樣做。現在的網遊環境不比最初,火一點的遊戲都會伴隨著外掛的產生。所有網遊都會把資料的合法性和安全性放在很重要的位置。基本所以mmorpg這種都是把運算放在伺服器來做。但是其實還是一些特殊的網遊是交給前端計算的。這類網遊一般都是單局型的競技網遊。類似moba,大亂鬥,rts這種,他們會採用一種叫“幀同步”的方法,把運算交給前端,後端只負責廣播。(fps則不會用“幀同步”)當然不是所有的這類遊戲都是這樣做,但是確實是有不少這類遊戲會採用“幀同步”的演算法來實現對戰。所謂的“幀同步”就是,伺服器只負責收集玩家的操作,然後廣播給所有同一局的玩家。所有的玩家(前端)各自嚴格按順序計算。因為所有輸入的條件都是一致的,所有產生的結果也是一樣的。拿war3舉個例子:A玩家操作了小兵去攻擊了野怪,並正好能把野怪打死,B玩家操作小兵去攻擊A玩家的小兵,並正好能把A小怪打死。但是A發到伺服器的時間是1分17秒,B操作發到伺服器的時間是1分18秒。那麼所有玩家收到的廣播就是A小兵1分17秒攻擊了野怪,B小兵1分18秒攻擊了A小兵。按順序執行就是A打死了野怪然後被B打死。但是如果伺服器收到的順序是剛好相反,那麼就是A沒有打死野怪就被B打死。可以看出,如果所有的客戶端都嚴格按照伺服器給的順序執行,那麼所有的前端看到的結果都是一樣的。那麼為什麼這類遊戲會選用這種方式來做呢。原因有很多∶1.“作弊”的影響範圍很小,就算一不小心防不住你作弊。那我最差的情況也只是影響了這局玩家的體驗,並不會說搞壞整個遊戲生態。2.網路包很小,競技遊戲對於實時性要求很高,操作又很多。如果像mmo rpg一樣傳大量的狀態資料,技能資料那麼會很影響體驗。如果我只傳運算元據就能提升網路效率3.就是同步很“嚴謹”。像上面例子那樣,如果給出嚴格的操作順序(其實就相當於棋譜一樣),那麼放到任何一個客戶端,重複演算個上萬遍,得出的結果都是一樣的(好了,錄影功能也有了)當然咯,“幀同步”的優點就算再多,始終有一個問題是無法迴避的,就是像其他網遊一樣,怎麼防作弊。一般來說,像moba或者大亂鬥這類遊戲,會採取投票機制。就是這局打完,大家一起投票,少數服從多數。拿moba為例,就算你開外掛改資料,把你攻擊改成一刀999。在其他客戶端的那裡,你攻擊還是沒變。你這邊在亂殺,在別人眼裡就跟個傻子一樣亂跑。然後遊戲結束,大家把結果提交給伺服器一合計,發現就你結果不一樣。伺服器就認為你作弊了,不採用你的結果。那麼像rts大多數都是1v1的話,沒辦法少數服從多數。我猜可能伺服器自己會跑一份邏輯吧。不過rts樣本太少,需要連伺服器跑的rts,我就知道一個星際2。甚至他是不是用“幀同步”來做都不好說總的來說,現在基本大部分網遊都是交給伺服器運算。而且現在伺服器效能越來越強,網路越來越好,即使是競技網遊,很多都願意把計算放在後端來做。因為“幀同步”其實有一些很讓人頭疼的問題。像追蹤bug,不同系統上的浮點數運算等等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69951811/viewspace-2664580/,如需轉載,請註明出處,否則將追究法律責任。

相關文章