[轉載] 網絡遊戲實時動做同步方案手記(3)

出處 http://blog.csdn.net/akara/article/details/5936744算法

只有(1)和(3),第(2)篇,網上根本找不到,我也試圖私信過原做者詢問,至今沒有回覆。安全

------------------------------------------------------服務器

基於上面的(1)(2)兩篇同步方案知識,能夠寫個demo來試驗同步的效果。

  須要找一個p2p庫來作系列同步算法的demo。選了RakNet-4.0.Beta5。
  官方網站是http://www.jenkinssoftware.com/
  RakNet提供了以下基於UDP的信道功能:
  > 丟包重發
  > 高效包排序
  > 包數據安全性保證,自動發現並報告被修改的包
  > 流控制和包合併
  > ....
  在頻繁發送大量大致積數據包的狀況下,可能選擇RakNet並不高效;
  但對於選用RakNet製做遊戲而言,你總能夠優化發送頻率和體積。
  RakNet的SDK文檔和Demo豐富,接口友好,跨平臺,自用免費,商用收費(貴)。

  要實現同一副本遊戲中各peer間互聯,能夠用RakNet提供的幾種方法:
* 全部Peer在同一局域網內,可進行預約義指令廣播來發現peer,
  接到指令的peer來請求鏈接對方。

* 針對互聯網上的廣泛狀況互聯,則要創建幾種服務器來實現NAT穿透:

  > Directory Server
    提供每一個副本遊戲獨立的peers信息表(由其中各peer本身先行提交),
    信息表中包含各peer的ip:port,guid等信息,而每一個peer在網絡幀中對
    Directory Server的新peer信息進行處理並向NATPunchthroughServer發起
    穿透NAT的請求。
 
    Directory Server在RakNet中有幾種形式的實現:
    (1)SQLite plugin
    (2)lobby server
    (3)PHP Directory Server
    能夠隨便選一種,但寫demo簡單起見,用PHP Directory Server。
    更方便的是有一個官方的PHP Directory Server能夠直接用:)

  > NAT類型檢測Server
    寫Demo暫時不創建這個服務。大多數NAT仍是可穿透的。

  > NATPunchthroughServer
    提供NAT穿透服務。即所說的UDP打洞(Punching)技術。
    打洞的大體原理網絡上有不少很好的文章能夠查閱。
    由於對port的映射方式和持續方式不一樣,並非全部的NAT類型均可以穿透。
    具體的NAT類型和是否能夠穿透的關係以下表:
    
    據一些調查報告稱國內存在約5%的NAT不可穿透。
    但一些P2P VOD的實踐者稱不可穿透的NAT比例在15%左右。
    因此當peer間沒法進行NAT穿透時,UDPProxyCoordinator + UDPProxyServer
    即是終極方案,雖然成本增長,但forwarding總不會有事。
    
  > UDPProxyCoordinator
    UDPProxyServer管理器。一個UDPProxyCoordinator可接多個UDPProxyServer,
    它負責指派UDPProxyServer的信息給peer進行UDP轉發,
    也監控各UDPProxyServer的負載狀況作負載均衡,
    UDPProxyServer能夠動態掛接添加到UDPProxyCoordinator上。
    掛接UDPProxyCoordinator時須要輸入UDPProxyCoordinator的掛接密碼認證。
  
  > UDPProxyServer
    負責UDP包轉發。開發者能夠按負載需求增添UDPProxyServer的數量。

---------------------------------------------------------------------

  以上的互聯結構在個人搭建方案中大體以下圖:網絡

相關文章
相關標籤/搜索