多人在线网络游戏的同步算法一 基础篇

0 常识

1
在一款单机游戏中,玩家只需和本地游戏里面的元素(如AI,NPC等)进行实时交互即可。

2
而在多人在线网络游戏中,玩家还需要同联网的其他玩家进行互动,在本地看到的其他玩家,本质上,都是其他玩家的镜像。我们知道,其他玩家的行为,通过网络传输过来,是有延时的。这和真实世界不一样,在真实世界里看到某个人作出某个动作,从他做出动作到被你看到,这个时间是可以忽略不计的(距离/光速)。而在网络上传输的时延就大多了,特别是对于一个在南半球的玩家A,和另一个在北半球B的玩家来说,他们的传输距离很可能大于地球直径(6400km),如果传输按照最快的光速来计算,那么从A到B的最小时延也是6400km/300000km*1s = 0.021s = 21ms,再加上经过每一个hop时,路由器计算转发所需的时间,延时可能会达100ms,数据一个来回大概200ms。

3
如何处理好长达200ms的网路时延,减少它对游戏体验带来的负面影响,是一个具有挑战性的技术活。

1 Model Involution

1.1 Peer To Peer

在早期的游戏中,Doom和Duke Nukem就是采用的Peer To Peer模型,在这些游戏中,每一个客户端运行的程序都是相同的,对每个玩家来说,都是将当前输入和时间戳发送给其它客户端进行处理,由于每个客户端游戏的前置状态相同,逻辑相同,在相同输入的情况下,就会产生相同的结果(状态)。其同步算法采用的是LockStep,在这里,我们将“所有客户端针对相同的玩家输入,一定会产生相同的结果”的同步算法,统称为LockStep算法。
这类模型的缺点有:

  1. 所有玩家依赖于相同的初始状态,玩家不能随意的进出游戏;
  2. 由于使用LockStep,这样当玩家数量递增时,网络引发故障的几率也相应的增加;
  3. 由于所有玩家的机器都使用相同的帧率,所以很难支持各种不同的机器;
  4. 网状网络总的连接数为O(N*N),玩家数量递增时,网络复杂度高,总体流量大。

1.2 Client To Pseudo Server

在多个玩家中,选一个作为server,在游戏过程中,其他玩家将输入指令发送给选定的server进行广播,这个模型相对于Peer To Peer而言,最显著的优势是,它使用星型网络结构,所有的客户端只和选定的server进行通讯,网络复杂度降低,总体流量要小很多;另外,它还有个好处,对于服务器资源匮乏的开发商而言,将玩家客户端选举为服务器来负责通讯,也不失为一种节省成本的方案,但它的缺点也很明显:

  1. 如果选定的server掉线了,必须再选举一个client所为新的server才能继续游戏,这增加了游戏设计的复杂度;
  2. 被选定为server的客户端拥有绝对的权威,一些geek可以利用这个特性来修改数据包从而进行作弊。
    暴雪经典的RTS游戏,比如星际争霸,魔兽争霸,使用的就是这种模型,是的,它需要有个人做主机,DOTA1由于是运行在魔兽争霸之上的,所以最开始也是这种模型,后来为了支持跨局域网功能,就由各平台服务器来充当这个server。

1.3 Client To Server

现代网游几乎都采用这种真实的C/S模型,所有客户端都通过这个权威的server进行通讯,最大的好处是,通过这个权威的服务器,你可以在服务端设置特定的反作弊策略。具体地,服务器同步那些数据,是同步所有游戏的帧状态,还是定时同步所有游戏状态的某个子集,还是仅仅同步玩家操作,不同的游戏服务器有不同的选择,however,无论哪一种要实现起来都不是一件很简单的事

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值