常见网络游戏同步方式
一、為什么需要有同步呢?
同步機制是用來維護游戲的一致性,通俗的說就是虛擬世界中的事實;比如在CF中,大家的PING都很高,A和B兩個玩家同時發現了對方,并向對方開火,如果沒有很好的同步機制,那么A玩家的顯示B還沒有開槍就被擊中,而B的屏幕上顯示玩家A還沒有開槍就被殺死,這就出現了不一致的問題,那么這個游戲就沒法正常玩了。
延遲是造成不一致問題的主要原因。如果延遲都為0,那么也就不存在不一致的問題了,就像在真實世界中一樣。而同步機制除了基本的通信作用外,最重要的任務就是解決不一致問題。為了保證游戲的一致性,根據游戲類型、技術條件的不同,選擇的同步方式也會不同。
二、同步方式的基本思路
其實最容易實現同步的游戲應該就是回合制游戲了;同步機制還是采用了回合的思想,像目前的即時游戲,其實也是由許多時間跨度非常短的回合(turn)組成的,由于人眼的記憶時間是0.1秒,在回合跨度小于這個時間的游戲里,玩家是感受不到有回合的感覺的。
圖中是A、B、C三個玩家的時間軸,虛線劃分出來的是每一個turn的時間片(一個回合),假如說A、B、C這三個玩家是敵對的,在某一個turn,A發出了攻擊B的指令、B發出了攻擊C的指令,C發出了攻擊B的指令;那么在這個turn結束后開始計算(由于turn的時間跨度很小,玩家難以覺察出延遲),游戲里的表現就是:在同一時間角色A攻擊了B,角色B和角色C相互發生了攻擊。
?
?
常見游戲網絡同步方式
C/S同步方式:
(C是客戶端,GSS是服務端)
優點:服務器實現整套游戲邏輯,安全性高。計算都是在服務器上,客戶端的邏輯運算壓力低;客戶端可以進行預處理一些內容,客戶端本地的即時性相對較高。
優點:服務器實現整套游戲邏輯,安全性高。計算都是在服務器上,客戶端的邏輯運算壓力低;客戶端可以進行預處理一些內容,客戶端本地的即時性相對較高。
?
缺點:服務器和客戶端需要進行所有的數據交互和同步,導致網絡流量大;服務器的計算壓力大,承載的能力受到限制;由于需要通過服務器中轉,導致不同客戶端之間的即時性較差;由于C/S?架構數據是以服務器為準,那么本地可能會和服務器的不同,導致玩家看到的和最終結算的結果不同。
?
適用的游戲:大型的MMORPG網游等不需要對操作響應要求極高的游戲,同屏內沒有大量的需要快速響應的單位的游戲;需要服務器強校驗的游戲。
幀 同步方式:
(FrameServer?用來同步的服務器,ArenaServer是在客戶端的表現以及計算邏輯)
優點:服務器僅作轉發邏輯,承載壓力低;客戶端與服務器僅需要傳遞同步的數據,網絡流量少;所有的計算邏輯都在客戶端,服務端和客戶端的開發關聯度低,便于開發。
?
缺點:相對與C/S結構來說,幀同步的邏輯都在客戶端,安全性理論上會較弱,但是可以通過對比各個客戶端每幀的checksum檢查某個客戶端是否存在不同,然后做出是否作弊的判定。針對多人幀同步游戲,通過對每幀數據的檢測可以很好的保證游戲安全性,所以多人幀同步游戲一般安全性會很好。
?
適用的游戲:需要對操作響應要求較高的游戲,且同屏之內有大量需要快速響應的單位類似dota2,星際等。同時玩一局游戲的人不多。
戲的人不多。
P2P同步方式:
?
(C是客戶端,GSS是服務端)
優點:服務器僅作轉發邏輯,承載壓力低;客戶端與服務器僅需要傳遞同步的數據,網絡流量少;所有的計算邏輯都在客戶端,服務端和客戶端的開發關聯度低,便于開發,客戶端之間的延遲低。
?
缺點:邏輯都在客戶端,導致容易被攻擊;不容易做安全性校驗;且只能適合少量的類似局域網的用戶。
?
適用的游戲:需要對操作響應要求極高的游戲,類似QQ飛車,FPS類游戲等;同時玩一把游戲的人不多,理論上來說不適合用來做網絡游戲的方案,因為容易被外掛攻擊。
?
?*轉載請注明來自游戲安全實驗室(GSLAB.QQ.COM)
轉載于:https://www.cnblogs.com/nothx/p/8531897.html
總結
以上是生活随笔為你收集整理的常见网络游戏同步方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 04_Struts2标签
- 下一篇: Sersync实现触发式文件同步