<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    I want to fly higher
    programming Explorer
    posts - 114,comments - 263,trackbacks - 0

    網絡游戲同步基礎

    關鍵詞

    • 幀同步
    • 狀態同步
    • LockStep
    • Timebucket
    • Timewarp
    • Dead Reckoning
    • Client-side Prediction
    • Server-side Latency Compensation
    • 延時、抖動、丟包率
    • UDP vs. TCP

    主流的網絡游戲同步方式一覽

    • MOBA
          王者榮耀:幀同步
          WAR3:幀同步
          全民超神:狀態同步
          亂斗西游:狀態同步
          LOL:狀態同步
          Dota2:狀態同步
    • MMO
          MMO均采用狀態同步,如魔獸世界
    • FPS
          FPS類游戲大多采用狀態同步
    • 動作格斗類游戲
          街機三國:幀同步
    • 體育競技類游戲
          NBA2K OL:幀同步

    網絡游戲同步“大”分類

    • Peer-to-Peer Lockstep
          早期的網絡拓撲模型
    • Client/Server
          The Server is the Man
    • Client-Side Prediction
          客戶端預測和延遲補償,“消除”網絡延遲

    什么是幀同步?

    War3/星際等采用,基于指令驅動各個客戶端自計算邏輯。服務端只管分發指令,每個客戶端根據完整的規則運算整個戰場。
    每個客戶端播放效果就像是看視頻。
    對視覺同步要求較高。
    

    核心

    保證所有客戶端每幀的輸入都一樣--同步性
    相同的輸入下要有相同的輸出--確定性
    

    優點

    • 因為只需要同步指令,所以流量消耗非常小

    缺點

    • 斷線需要補幀,即一旦你的戰場狀態沒有了,必須從頭開始,從第一個指令運算到連回去的戰場狀態。

    什么是LockStep?

    典型的一種幀同步算法,最早用于P2P。Lockstep把游戲過程劃分成了一個個turn,只有當每個turn集齊了所有玩家的操作指令,也就是輸入確定了之后,才可以進行計算,進入下一個turn,否則就要等待最慢的玩家。
    使用Lockstep的游戲是嚴格按照turn向前推進的,如果有人延遲比較高,其他玩家必須等待該玩家跟上之后再繼續計算,不存在某個玩家領先或落后其他玩家若干個turn的情況。使用Lockstep同步機制的游戲中,每個玩家的延遲都等于延遲最高的那個人。
    

    什么是Timebucket?

    設置了 bucket的概念, 執行每一幀的時間是固定的 bucket 時間節點, 而不必等到收到所有的 client step 指令, 從而網絡不再受最差的 client 限制.
    

    什么是狀態同步?

    MMORPG的主要實現方式,服務器負責計算全部的游戲邏輯,并且廣播這些計算的結果,客戶端僅僅負責發送玩家的操作,以及表現收到的游戲結果。一般來說,玩家發送一個操作到服務器上,服務器根據玩家操作去修改內存中的游戲世界模型,同時運算游戲世界對這個操作的反應,然后把這些反應都廣播給相關的多個客戶端,每個客戶端負責把這些數據表現出來給玩家看。
    一句話,The Server is the Man!
    

    什么是DR?

    Dead Reckoning,導航推測算法,即客戶端模擬運動軌跡和路線,如果真實坐標和模擬坐標的差值大于某個極限誤差的時候則廣播,收到消息后進行平緩的拉扯處理。
    屬于客戶端預測。
    

    什么是Timewarp?

    客戶端先行,發現邏輯不一致的時候,進行回滾。
    

    什么是延遲補償?

    服務器端考慮了客戶端的網絡延遲,將服務器狀態回滾到延遲前,再進行運算。
    

    什么是延時、抖動、丟包率?

    ping kingsoft.cn
    正在 Ping kingsoft.cn [192.168.12.19] 具有 32 字節的數據:
    來自 192.168.12.19 的回復: 字節=32 時間=5ms TTL=123
    來自 192.168.12.19 的回復: 字節=32 時間=6ms TTL=123
    來自 192.168.12.19 的回復: 字節=32 時間=5ms TTL=123
    請求超時。
    192.168.12.19 的 Ping 統計信息:
    數據包: 已發送 = 4,已接收 = 3,丟失 = 1 (25% 丟失),
    往返行程的估計時間(以毫秒為單位):
    最短 = 4ms,最長 = 6ms,平均 = 5ms
    ______________________________________
    注:延時5ms
    抖動:(4ms-5ms)~(6ms-5ms),即-1ms~+1ms,[最短延時-平均延時] ~ [最長延時-平均延時]
    丟包率:25%
    

    如何選擇協議?

    TCP vs. UDP
    亂斗西游采用的是UDP
    NBA2K OL存在用的是UDP
    補充一句:使用哪種同步方式和協議方式沒有必然聯系;比如亂斗西游是UDP+狀態同步,而街機三國是TCP(TCP_NODELAY) + 幀同步
    注:可參考本人的上一篇文章:
    Networking Basics:TCP and UDP Basics

    幀同步如何防外掛?

    如果初始狀態一樣和隨機種子一樣,那么只要每幀的輸入高度一樣(因為是由服務器切幀分發的,可以保持每個客戶端的輸入序列是一樣的),那么每幀的運算結果也是一樣的。為此讓每個客戶端驗證每幀的結果是不是與其它幾個客戶端是一模一樣的,我們就可以拿來做為校驗原因。只要有不一樣的結果,即有人做弊。
    

    為什么MMO不能用幀同步?

    幀同步的[所有人]的輸入必須在[所有客戶端]進行計算,這樣大家運算出來的結果才能一樣,才能保證幀同步.注意是【所有人】.所以常見用于rts,moba、2k等房間游戲.因為人數固定.但是mmo中玩家不定,如果同步所有人。。這個帶寬(即傳輸問題)。。所以mmo中用狀態同步+aoi視野管理.
    

    References

    posted on 2016-06-13 18:54 landon 閱讀(3395) 評論(0)  編輯  收藏 所屬分類: GameServer
    主站蜘蛛池模板: 最新69国产成人精品免费视频动漫 | 毛片免费观看视频| 青青青国产在线观看免费网站| 99久久综合国产精品免费| 亚洲精品国自产拍在线观看| 亚洲成AV人片在线观看| 大妹子影视剧在线观看全集免费| 免费国产在线观看| 亚洲无人区视频大全| 午夜老司机永久免费看片| 久久综合亚洲鲁鲁五月天| 91精品免费久久久久久久久| 亚洲制服丝袜精品久久| a级男女仿爱免费视频| 国产成人高清精品免费软件| 中文字幕亚洲精品| 波多野结衣免费在线| 亚洲AV色香蕉一区二区| 一区二区三区免费在线视频 | 亚洲韩国精品无码一区二区三区| 国产午夜无码片免费| 亚洲邪恶天堂影院在线观看| 久久久久久久免费视频| 亚洲AV日韩综合一区尤物| 人人狠狠综合久久亚洲高清| 亚洲娇小性xxxx色| 国产裸模视频免费区无码| 免费一级全黄少妇性色生活片 | 亚洲国产精品xo在线观看| 日韩免费在线观看| 中文在线观看永久免费| 亚洲另类古典武侠| 亚洲&#228;v永久无码精品天堂久久| 国产精品一区二区三区免费| 国产一区二区三区无码免费| 久久最新免费视频| 亚洲国产理论片在线播放| 亚洲成av人片天堂网老年人| 在线人成精品免费视频| 亚洲黄网站wwwwww| 亚洲国产成人久久一区WWW|