首页 > 代码库 > [转贴] 网络游戏实时动作同步方案手记(3)
[转贴] 网络游戏实时动作同步方案手记(3)
出处 http://blog.csdn.net/akara/article/details/5936744
(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的数量。
---------------------------------------------------------------------
以上的互联结构在我的搭建方案中大致如下图:
[转贴] 网络游戏实时动作同步方案手记(3)