出处 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的数量。
---------------------------------------------------------------------
以上的互联结构在个人搭建方案中大体以下图:网络