出處 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的數量。
---------------------------------------------------------------------
以上的互聯結構在個人搭建方案中大體以下圖:網絡