网络即时对战网游游戏是怎么做到同步运行的

说到网络同步,这真是一个网络游戏的重中之重,一个好的网络同步机制,可以让玩家的用户体验感飙升,至少,我玩过的魔兽争霸在网络同步方面做得非常好,即便是网络状况很不稳定,依然可以保证用户数据不会出现意想不到的问题。
& & & &在真正介绍同步这个大块头之前,我还要介绍一点,就是我们用什么样的网络协议,在我们面前,可用也是很广泛的协议无非是tcp和udp,这两个协议有什么区别我就不在此累述了,那么我就直接告诉大家,在游戏中数据包的传递工作尽可能的使用udp协议,为什么呢?因为快速简单,在一个需要高操作的游戏中,网络数据的传输速度是占主导地位的,就算udp协议没有tcp那么可靠,但是我们可以建立一个类似tcp的收发包回应排序机制来确保数据的正确传输,而且如果只是在局域网内的话,丢包率和乱序的情况是非常少见的,所以我们在像即时战略这样需要大量数据传递的游戏中首选udp(包括后面的第一人称射击游戏也是一样)。感兴趣的朋友可以试试使用tcp,那样的话,你的游戏极有可能出现人物瞬移,画面错乱的情况。
什么是网络同步,就是让两个联机的游戏程序里面的数据,所表现出来的画面尽可能的一致(完全一致几乎不可能),因为网络传输的关系,还每个电脑的情况都不尽相同,我们需要做很多协调工作来确保这样的一致,网络同步的办法有很多种,我这里介绍一种,也是我游戏里面用的这一种:帧同步。
什么是帧同步,这个网上的资料非常少,其实帧同步也可以叫做帧锁定,就是两个机子根据当前的帧数来决定是否更新逻辑,当然,两个机子的帧数更新以服务器端为准,举个例子:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1145次
排名:千里之外只有(1)和(3),第(2)篇,网上根本找不到,我也试图私信过原作者询问,至今没有回复。
------------------------------------------------------
基于上面的(1)(2)两篇同步方案知识,可以写个demo来试验同步的效果。& 需要找一个p2p库来做系列同步算法的demo。选了RakNet-4.0.Beta5。& 官方网站是/& 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的数量。---------------------------------------------------------------------& 以上的互联结构在我的搭建方案中大致如下图:
阅读(...) 评论()本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 即时对战类游戏 的文章

 

随机推荐