一种高效网络同步方法、装置及系统
文献发布时间:2023-06-19 11:34:14
技术领域
本发明涉及计算机技术领域,更具体地说,涉及一种高效网络同步方法、装置及系统。
背景技术
随着网络游戏的发展,即时战斗类游戏越来越受大众欢迎。在网络传输的时候,特别是手机网络,延迟现象是很普遍的,如不能完美的解决游戏同步问题,就不能给玩家提供酣畅淋漓的游戏体验。
现阶段处理同步问题主要有状态同步和帧同步两种方式。其中,状态同步是将所有的逻辑交给服务器计算,并通知给客户端进行表现。状态同步的好处是逻辑一定是一致的,因为计算都在服务器,确保了游戏的防外挂能力,如传奇、征途、天龙八部等都是状态同步。而帧同步主要是基于LockStep的技术,服务器只转发游戏操作的指令,所有逻辑客户端完成,且所有客户端每一帧的每一个逻辑必须是一致的。这种同步方案能完美的解决复杂的战斗逻辑同步问题,所需同步的数据也相对较少,如王者荣耀、魔兽争霸都是这种同步方案。
但是,状态同步中同步所有的操作都需要服务器返回,非常依赖网络延迟,且服务器计算压力、网络数据同步量都非常大,客户端表现能力也非常有限。而帧同步所有逻辑都是客户端完成的,这导致反外挂能力非常糟糕,并且,为了优化lockstep的不锁定问题,逻辑帧需要服务器同步,核心逻辑仍旧需要服务器回包才能执行,所以也有一定的延迟依赖。
发明内容
有鉴于此,为解决上述问题,本发明提供一种高效网络同步方法、装置及系统,技术方案如下:
本发明一方面提供一种高效网络同步方法,所述方法应用于玩家角色属于主动方的第一客户端,所述方法包括:
接收玩家输入的第一控制指令,所述第一控制指令中包含针对相应玩家角色的操作动作、以及所述操作动作执行时的第一逻辑帧,所述第一逻辑帧的时间晚于所述第一客户端的当前逻辑帧;
通过所述第一客户端的当前逻辑帧驱动所述第一客户端的逻辑层执行所述操作动作,同时,将所述第一控制指令上传至服务器;
接收所述服务器基于所述第一控制指令所下发的第二控制指令,所述第二控制指令中包含驱动所述服务器和第二客户端执行所述操作动作的第二逻辑帧,所述第二客户端所对应的玩家角色属于被动方,所述第二逻辑帧的时间不早于所述第一逻辑帧;
如果所述第二逻辑帧的时间等于所述第一逻辑帧,则将所述第一逻辑帧确定为关键逻辑帧;
如果所述第二逻辑帧的时间晚于所述第一逻辑帧,调取距离所述第一客户端的当前逻辑帧最近的一个目标关键逻辑帧,并通过所述第二逻辑帧驱动所述第一客户端的逻辑层执行由所述目标关键逻辑帧至所述第二逻辑帧范围内所有控制指令内的操作动作。
优选的,所述操作动作包括用于指示玩家角色位置改变的第一动作;
所述通过所述第一客户端的当前逻辑帧驱动所述第一客户端的逻辑层执行所述操作动作,包括:
对相应玩家角色进行航位预测,以修正所述第一动作对应的位置改变程度;
通过所述第一客户端的当前逻辑帧驱动所述第一客户端的逻辑层执行修正后的所述第一动作。
优选的,所述操作动作包括用于指示释放目标技能的第二动作,所述目标技能的释放效果是随机的;
所述通过所述第一客户端的当前逻辑帧驱动所述第一客户端的逻辑层执行所述操作动作,包括:
调取随机种子,所述随机种子是所述服务器预先在指定逻辑帧下向所述第一客户端和所述第二客户端下发的;
通过所述第一客户端的当前逻辑帧驱动所述第一客户端的逻辑层按照所述随机种子的随机结果执行所述第二动作。
优选的,所述方法还包括:
控制所述第一客户端的逻辑层将其所执行操作动作的第一执行结果输出至所述第一客户端的视图层;
调取所述第一客户端的当前视图帧,通过所述第一客户端的当前视图帧驱动所述第一客户端的视图层以平滑插值的方式展示所述第一执行结果。
本发明另一方面提供一种高效网络同步装置,所述装置包括:
指令输入模块,用于接收玩家输入的第一控制指令,所述第一控制指令中包含针对相应玩家角色的操作动作、以及所述操作动作执行时的第一逻辑帧,所述第一逻辑帧的时间晚于所述第一客户端的当前逻辑帧;
操作执行模块,用于通过所述第一客户端的当前逻辑帧驱动所述第一客户端的逻辑层执行所述操作动作;
通信模块,用于将所述第一控制指令上传至服务器;接收所述服务器基于所述第一控制指令所下发的第二控制指令,所述第二控制指令中包含驱动所述服务器和第二客户端执行所述操作动作的第二逻辑帧,所述第二客户端所对应的玩家角色属于被动方,所述第二逻辑帧的时间不早于所述第一逻辑帧;
所述操作执行模块,还用于如果所述第二逻辑帧的时间等于所述第一逻辑帧,则将所述第一逻辑帧确定为关键逻辑帧;如果所述第二逻辑帧的时间晚于所述第一逻辑帧,调取距离所述第一客户端的当前逻辑帧最近的一个目标关键逻辑帧,并通过所述第二逻辑帧驱动所述第一客户端的逻辑层执行由所述目标关键逻辑帧至所述第二逻辑帧范围内所有控制指令内的操作动作。
本发明另一方面提供一种高效网络同步方法,所述方法应用于玩家角色属于被动方的第一客户端,所述方法包括:
接收服务器基于第一控制指令所下发的第二控制指令,所述第一控制指令是由第一客户端上传至所述服务器的,所述第一客户端的玩家角色属于主动方,所述第一控制指令中包含针对相应玩家角色的操作动作、以及所述操作动作执行时的第一逻辑帧,所述第一逻辑帧的时间晚于所述第一客户端接收所述第一控制指令时的当前逻辑帧,所述第二控制指令中包含第二逻辑帧,所述第二逻辑帧的时间不早于所述第一逻辑帧;
通过所述第二逻辑帧驱动所述第二客户端的逻辑层执行所述操作动作。
优选的,所述方法还包括:
在网络状态由掉线切换为在线的情况下,向所述服务器上传重连请求;
接收所述服务器基于所述重连请求所下发的场景信息,所述场景信息中包含游戏场景内各角色的状态信息、以及处于执行状态下的目标控制指令,所述目标控制指令中包含针对相应玩家角色的目标操作动作、以及所述目标操作动作执行时的目标逻辑帧;
根据所述第二客户端的当前逻辑帧与所述目标逻辑帧的时间差,确定所述目标操作动作中未被执行的部分操作动作;
通过所述当前逻辑帧驱动所述第二客户端的逻辑层执行所述部分操作动作,并控制所述第二客户端的逻辑层将所述部分操作动作的第二执行结果输出至所述第二客户端的视图层;
调取所述第二客户端的当前视图帧,通过所述第二客户端的当前视图帧驱动所述第二客户端的视图层根据所述状态信息展示所述游戏场景、并在所述游戏场景中以平滑插值的方式展示所述第二执行结果。
本发明另一方面提供一种高效网络同步装置,其特征在于,所述装置包括:
通信模块,用于接收服务器基于第一控制指令所下发的第二控制指令,所述第一控制指令是由第一客户端上传至所述服务器的,所述第一客户端的玩家角色属于主动方,所述第一控制指令中包含针对相应玩家角色的操作动作、以及所述操作动作执行时的第一逻辑帧,所述第一逻辑帧的时间晚于所述第一客户端接收所述第一控制指令时的当前逻辑帧,所述第二控制指令中包含第二逻辑帧,所述第二逻辑帧的时间不早于所述第一逻辑帧;
操作执行模块,用于通过所述第二逻辑帧驱动所述第二客户端的逻辑层执行所述操作动作。
本发明另一方面提供一种高效网络同步系统,所述系统包括:服务器和多个客户端,一个客户端对应一个玩家角色;
玩家角色属于主动方的第一客户端执行相应的任意一项所述的高效网络同步方法;
玩家角色属于被动方的第二客户端执行相应的任意一项所述的高效网络同步方法。
优选的,所述服务器以被动指令的方式向各客户端下发指定逻辑的运算结果。
相较于现有技术,本发明实现的有益效果为:
本发明提供一种高效网络同步方法、装置及系统,将整个游戏网络世界分为服务器、主动方和被动方,其中主动方是指玩家在客户端中所操控的游戏角色、被动方则是指玩家在客户端中所看见的其他游戏角色。对于主动方所属的第一客户端,其玩家输入的控制指令中操作动作执行时的第一逻辑帧晚于当前逻辑帧,因此通过当前逻辑帧驱动其逻辑层执行该操作动作,即可实现主动方操作动作的预计算。另外,将该第一控制指令上传至服务器后,服务器则对该第一控制指令响应产生下发给各客户端的第二控制指令,一旦第二控制指令中的第二逻辑帧晚于第一逻辑帧,则主动方所属的第一客户端通过第二逻辑帧驱动其逻辑层执行由上一关键逻辑帧至第二逻辑帧范围内所有控制指令内的操作动作,以此实现所有客户端的同步,其中关键帧是指验证通过的逻辑帧。本发明在C/S架构下,结合帧同步的优势,实现高效同步,既能保证低网络延迟、又提高用户操作体验,能够防外挂,方便处理重连、预测等同步问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的高效网络同步方法的方法流程图;
图2为本发明实施例提供的平滑插值示意图;
图3为本发明实施例提供的场景示意图;
图4为本发明实施例提供的高效网络同步装置的结构示意图;
图5为本发明实施例提供的高效网络同步方法的另一方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明实施例中,将整个网络游戏世界被分成3个部分:服务器、被动方、主动方。其中主动方是指玩家在客户端中所操控的游戏角色、被动方则是指玩家在客户端中所看见的其他游戏角色。简单来说,一个玩家的客户端里,其操控的游戏角色即为主动方,其他玩家操控的游戏角色对于该玩家则属于被动方。在本发明中,服务器、被动方和主动方直接遵循以下原则:
1)在时间上,主动方领先于服务器,服务器领先于被动方;
2)在逻辑上,被动方与服务器是一致的,比如游戏角色的位置,该游戏角色在被动方和服务器同一逻辑帧下的同一位置坐标。而主动方则会跟服务器有所偏差,这是由于主动方有预计算。
3)主动方做航位预测,服务器做矫正,具体的,主动方根据自身的位置、移动状态、速度、加速度、方向等预测后面一段时间内可能到达的位置和可能与其他游戏角色发生的碰撞行为;服务器则在主动方预计算结果与实际计算结果发生较大偏差时,将主动方更正到服务器当前逻辑帧的位置。
本发明实施例提供一种高效网络同步方法,该方法应用于玩家角色属于主动方的第一客户端,方法的方法流程图如图1所示,包括如下步骤:
S101,接收玩家输入的第一控制指令,第一控制指令中包含针对相应玩家角色的操作动作、以及操作动作执行时的第一逻辑帧,第一逻辑帧的时间晚于第一客户端的当前逻辑帧。
本发明实施例中,主动方所对应的客户端即为第一客户端,对于一个游戏角色来说,操作该角色的客户端即为第一客户端,而观看该角色的其他客户端均属于第二客户端,该游戏角色对于第二客户端来说则属于被动方。
第一客户端响应玩家的触控操作,以产生第一控制指令,该第一控制指令包括该玩家的游戏角色的操作动作、以及执行该操作动作时的逻辑帧,即第一逻辑帧。该第一逻辑帧是基于当前逻辑帧所预测的,具体的,基于当前逻辑帧,考虑网络延迟和修正量来计算第一逻辑帧,假设当前逻辑帧为13帧、网络延迟为3帧、修正量为1帧,玩家触发游戏角色移动,此时第一客户端在第13帧时产生第一控制指令,该第一控制指令中指示在第17帧(13+3+1)时执行该游戏角色的移动逻辑。
需要说明的是,逻辑帧是指计算战斗逻辑的帧,如伤害计算、移动计算、击飞、Buff等。逻辑帧严格来说是越大越有利于游戏的体验,但越大,网络性能消耗也就越大,对网络的依赖也就越高。对性能来说,逻辑帧越小越好,但对于游戏体验来说,逻辑帧越大越好,因此为了优化性能,逻辑帧一般在15帧以内。
还需要说明的是,服务器和客户端运行同一套逻辑代码,但逻辑帧是由服务器驱动,绝大多数逻辑以服务器为准,即服务器按照一定的频率向所有客户端下发逻辑帧,客户端则以该逻辑帧驱动自身的逻辑,以此可以实现时间的校准。
S102,通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行操作动作,同时,将第一控制指令上传至服务器。
本发明实施例中,如上,客户端具有与服务器同等的计算能力,可以方便做预计算,即所有控制指令立即响应。另外,客户端的逻辑和视图完全分离,这是设计模式上分离,视图由逻辑驱动,逻辑的行为通过接口传递给视图、且逻辑层不需要关心视图层的任何状态,即便没有视图层,逻辑层也同样可以正常运行。
逻辑层即客户端运行的逻辑,比如考虑距离与速度关系的移动逻辑;视图层则是指玩家所看到的游戏画面,比如一个动画、一个特效。逻辑层由逻辑帧驱动,视图层由视图帧驱动。
由此,在逻辑方面,对于主动方来说,其通过当前逻辑帧驱动其逻辑层执行相应的操作动作,以此提前服务器和被动方完成逻辑计算。当然,逻辑层会将计算结果通过接口传递给视图层,视图层则由当前视图帧驱动完成画面的展示。具体实现过程中,为保证游戏不依赖网络波动,逻辑帧定义在15帧以内,视图层对逻辑层做平滑插值。具体如下:
控制第一客户端的逻辑层将其所执行操作动作的第一执行结果输出至第一客户端的视图层;调取第一客户端的当前视图帧,通过第一客户端的当前视图帧驱动第一客户端的视图层以平滑插值的方式展示第一执行结果。
本发明实施例中,第一客户端的逻辑层将其执行操作动作的执行结果输出给视图层,操作动作的执行结果为“直线移动距离a”为例,视图层获得该执行结果后,由当前视图帧驱动视图层对以平滑插值的方式输出多个视图帧,以此将“直线移动距离a”用连续的多个视图帧表示出来。当然,为保证玩家的视觉体验,多个视图帧中直线移动距离可以采用平滑的直线/曲线来体现。
具体的,参见图2所示的平滑插值示意图。视图层可以使用影子跟随算法,以逻辑层的执行结果为目标,按照相匹配的步长跟随,逻辑层执行的速度越快、视图层的输出视图帧的速度也就越快。开始时,逻辑的步长是10、视图的步长是1,如果视图快要追上逻辑了,则视图的步长就变小、防止追过;如果视图和逻辑距离太远,则视图的步长就变大,跟上逻辑。
需要说明的是,视图帧是指客户端渲染的帧率,为了保证画面连续流程,视图帧一般要在30帧以上。
S103,接收服务器基于第一控制指令所下发的第二控制指令,第二控制指令中包含驱动服务器和第二客户端执行操作动作的第二逻辑帧,第二客户端所对应的玩家角色属于被动方,第二逻辑帧的时间不早于第一逻辑帧。
本发明实施例中,由于客户端与服务器间存在网络延迟,因此客户端在其当前逻辑帧下向服务器上传的第一控制指令,对于服务器来说,其会在后续的逻辑帧下收到。
继续以第一客户端在当前逻辑帧为13帧时向服务器上传第一控制指令为例,第一控制指令中包含的第一逻辑帧为17帧,即第一客户端指示服务器在逻辑帧17帧时执行操作动作。显然,服务器在收到该第一控制指令时,服务器的当前逻辑帧是晚于13帧的,这就存在如下两种情况:
1)服务器是在逻辑帧17帧之前(包含17帧)收到第一控制指令。假设服务器收到第一控制指令时,其当前逻辑帧为15帧,与第一控制指令中的第一逻辑帧“17帧”对比后确定时间早于第一客户端指示的时间,将第二控制指令下发给所有客户端(包括第一客户端和第二客户端),此时第二控制指令与第一控制指令的内容相同,即第二控制指令中的第二逻辑帧也为17帧、第二控制指令中的操作动作也与第一控制指令中的操作动作相同。由于第一客户端已完成预计算,即已经在逻辑帧为13帧时执行了操作动作,因此第一客户端不再执行操作动作、由服务器和第二客户端在逻辑帧为17帧时执行操作动作。
进一步,第一客户端在收到服务器下发的第二控制指令中,确定第二控制指令中的第二逻辑帧“17帧”与其向服务器上传的第一控制指令中的第一逻辑帧“17帧”相同,则确定逻辑帧“17帧”通过验证,将其定义为关键逻辑帧。
2)服务器是在逻辑帧18帧之后收到第一控制指令。
参见图3所示的场景示意图。服务器收到第一控制指令是,其当前逻辑帧为18帧,与第一控制指令中的第一逻辑帧“17帧”对比后确定时间已经晚于第一客户端指示的时间,将第二控制指令下发给所有客户端(包括第一客户端和第二客户端),此时第二控制指令中的第二逻辑帧为18帧、操作动作与第一控制指令中的操作动作相同。
第一客户端和第二客户端在逻辑帧18帧时收到该第二控制指令,由于第一客户端所预测的逻辑帧存在偏差,此时第一客户端调取上一已经验证的关键逻辑帧“12帧”,并在18帧时将12帧到18帧间范围内接收到的服务器下发的所有控制指令中的操作动作全部执行一遍,具体由逻辑帧18帧驱动逻辑层来完成,这就相当于一次由服务器驱动的快速矫正。而第二客户端则在逻辑帧18帧时执行操作动作。
S104,如果第二逻辑帧的时间等于第一逻辑帧,则将第一逻辑帧确定为关键逻辑帧。
S105,如果第二逻辑帧的时间晚于第一逻辑帧,调取距离第一客户端的当前逻辑帧最近的一个目标关键逻辑帧,并通过第二逻辑帧驱动第一客户端的逻辑层执行由目标关键逻辑帧至第二逻辑帧范围内所有控制指令内的操作动作。
在其他一些实施例中,游戏中的位置信息,包括角色的位置、子弹的弹道、碰撞体的位置等属于关键信息。因此,本发明实施例可以通过主动方做航位预测的方式来修正控制指令中的位置信息。具体的:
操作动作包括用于指示玩家角色位置改变的第一动作。相应的,步骤S20中“通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行操作动作”可以包括如下步骤:
对相应玩家角色进行航位预测,以修正第一动作对应的位置改变程度;通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行修正后的第一动作。
本发明实施例中,考虑到游戏场景中诸如障碍物、敌方角色的位置等,在执行玩家角色位置改变的操作动作之前,首先对其进行修正。例如,第一控制指令中的操作动作指示玩家角色直线移动距离b,但考虑到移动过程中存在障碍物则和航位预测为“玩家角色直线移动距离c”,其中c小于b,则将第一控制指令中的操作动作修正为“指示玩家角色直线移动距离c”。
在其他一些实施例中,一般来说,服务器是拥有所有状态数据的,包括游戏角色的位置、血量、魔法值、Buff和被动效果等,因此很少会有随机的问题,但仍有一些复杂的场景需要用到随机解决方案,如一个技能效果是随机在附近生成很多球形的追踪子弹。对此,本发明实施例中可以通过服务器与客户端同步一个随机种子来实现服务器与客户端保持同一套随机算法,以计算出相同的随机结果。具体的:
操作动作包括用于指示释放目标技能的第二动作,目标技能的释放效果是随机的。相应的,步骤S20中“通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行操作动作”可以包括如下步骤:
调取随机种子,随机种子是服务器预先在指定逻辑帧下向第一客户端和第二客户端下发的;通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层按照随机种子的随机结果执行第二动作。
本发明实施例中,服务器预先在指定逻辑帧下向所有客户端下发一个随机种子,客户端在收到该随机种子的逻辑帧开始即与服务器保持同一条随机算法,计算出相同的随机结果,因此该随机种子能够实现服务器和各客户端每次调取随机种子时的随机结果是相同的。
以系统的随机函数为例,函数算法采用的线性取余,只要服务器和客户端间的随机种子相同,后续每次调取的随机结果相同,例如随机种子是100,则第一次调用时服务器、主动方和被动方的随机结果均为0.2、第二次调用三者的随机结果均为0.4。由此,基于相同的随机结果,服务器、主动方和被动方三者逻辑计算时即会产生技能随机释放效果相同的操作动作。
综上,本发明核心是在C/S架构里,充分利用帧同步的技术,但不是绝对的完全同步。服务器和客户端具有同等的计算能力,方便算力切换,让游戏具有较好的游戏同步体验。对比状态同步,本发明解决了网络传输数据量大、战斗同步逻辑简单、同步体验差、网络延迟高的问题。对比帧同步,本发明解决了安全性能低、使用范围小、调试难度大、断线重连问题严重、预处理能力差的问题。此外,使用本发明开发的游戏,能躲子弹、能多段击飞、能防外挂。
基于上述实施例提供的高效网络同步方法,本发明实施例则提供一种执行该方法的装置,该装置的结构示意图如图4所示,包括:
指令输入模块10,用于接收玩家输入的第一控制指令,第一控制指令中包含针对相应玩家角色的操作动作、以及操作动作执行时的第一逻辑帧,第一逻辑帧的时间晚于第一客户端的当前逻辑帧;
操作执行模块20,用于通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行操作动作;
通信模块30,用于将第一控制指令上传至服务器;接收服务器基于第一控制指令所下发的第二控制指令,第二控制指令中包含驱动服务器和第二客户端执行操作动作的第二逻辑帧,第二客户端所对应的玩家角色属于被动方,第二逻辑帧的时间不早于第一逻辑帧;
操作执行模块20,还用于如果第二逻辑帧的时间等于第一逻辑帧,则将第一逻辑帧确定为关键逻辑帧;如果第二逻辑帧的时间晚于第一逻辑帧,调取距离第一客户端的当前逻辑帧最近的一个目标关键逻辑帧,并通过第二逻辑帧驱动第一客户端的逻辑层执行由目标关键逻辑帧至第二逻辑帧范围内所有控制指令内的操作动作。
可选的,操作动作包括用于指示玩家角色位置改变的第一动作;操作执行模块20通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行操作动作的过程,包括:
对相应玩家角色进行航位预测,以修正第一动作对应的位置改变程度;通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行修正后的第一动作。
可选的,操作动作包括用于指示释放目标技能的第二动作,目标技能的释放效果是随机的;操作执行模块20通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层执行操作动作的过程,包括:
调取随机种子,随机种子是服务器预先在指定逻辑帧下向第一客户端和第二客户端下发的;通过第一客户端的当前逻辑帧驱动第一客户端的逻辑层按照随机种子的随机结果执行第二动作。
可选的,操作执行模块20,还用于:
控制第一客户端的逻辑层将其所执行操作动作的第一执行结果输出至第一客户端的视图层;调取第一客户端的当前视图帧,通过第一客户端的当前视图帧驱动第一客户端的视图层以平滑插值的方式展示第一执行结果。
基于上述实施例提供的高效网络同步方法,本发明实施例则对应提供另一高效网络同步方法,该方法应用于于玩家角色属于被动方的第二客户端,方法的方法流程图如图5所示,包括如下步骤:
S201,接收服务器基于第一控制指令所下发的第二控制指令,第一控制指令是由第一客户端上传至服务器的,第一客户端的玩家角色属于主动方,第一控制指令中包含针对相应玩家角色的操作动作、以及操作动作执行时的第一逻辑帧,第一逻辑帧的时间晚于第一客户端接收第一控制指令时的当前逻辑帧,第二控制指令中包含第二逻辑帧,第二逻辑帧的时间不早于第一逻辑帧。
本发明实施例中,第一客户端向服务器上传第一控制指令、以及服务器基于第一控制指令下发第二控制指令的过程,可以参见上述实施例对应公开部分,在此不再赘述。
S202,通过第二逻辑帧驱动第二客户端的逻辑层执行操作动作。
本发明实施例中,同一个客户端,针对不同游戏角色,其可以属于主动方、也可以属于被动方。对于玩家通过客户端所操控的游戏角色来说,该客户端属于主动方,而对于其他玩家通过其他客户端所操控的游戏角色来说,该客户端则属于被动方。
客户端作为被动方时,其接收服务器所下发的控制指令,即第二控制指令,此时解析该第二控制指令获得其中的第二逻辑帧和操作动作,通过第二逻辑帧驱动其逻辑层执行该操作动作。
在其他一些实施例中,为实现快速断线重连,在本发明实施例还包括如下步骤:
在网络状态由掉线切换为在线的情况下,向服务器上传重连请求;
接收服务器基于重连请求所下发的场景信息,场景信息中包含游戏场景内各角色的状态信息、以及处于执行状态下的目标控制指令,目标控制指令中包含针对相应玩家角色的目标操作动作、以及目标操作动作执行时的目标逻辑帧;
根据第二客户端的当前逻辑帧与目标逻辑帧的时间差,确定目标操作动作中未被执行的部分操作动作;
通过当前逻辑帧驱动第二客户端的逻辑层执行部分操作动作,并控制第二客户端的逻辑层将部分操作动作的第二执行结果输出至第二客户端的视图层;
调取第二客户端的当前视图帧,通过第二客户端的当前视图帧驱动第二客户端的视图层根据状态信息展示游戏场景、并在游戏场景中以平滑插值的方式展示第二执行结果。
本发明实施例中,客户端可以实时监测自身的网络状态,一旦监测到由掉线切换为断线时,即向服务器上传重新请求,以使服务器将其所拥有的状态信息、以及正在执行中的控制指令,即目标控制指令下发给该客户端。当然,该目标控制指令中包含相关玩家角色的目标操作动作、以及执行该目标操作动作时的目标逻辑帧。
由于目标操作动作正在执行中,因此当前逻辑帧必定晚于目标逻辑帧,此时可以根据当前逻辑帧和目标逻辑帧的时间差来预测目标操作动作未被执行的部分操作动作,进而由该当前逻辑帧驱动逻辑层执行该部分操作动作,并通过当前视图帧驱动视图层进行展示相关场景、以及该部分操作动作。
需要说明的是,客户端的视图层以平滑插值的方式展示第二执行结果的过程可以参见上述实施例中以平滑插值的方式展示第一执行结果的公开部分,在此不再赘述。
举例来说,角色A在0的位置发起了向前移动的行为、速度是1,5个逻辑帧后角色B的客户端掉线重连。对于该断线重连的客户端,如果其希望看到角色A的正确行为,则服务器需要一方面将角色B当前位置5发送给该客户端、另一方面还需要将5个逻辑帧前角色A所属客户端所上传的控制指令发给该客户端。断线重连的客户端获得这两方面的信息后,即可以通过当前逻辑帧与A开始移动时逻辑帧的时间差,再结合当前位置和速度即能计算出角色A此时在5的位置、并且继续向前移动。由此即可以获得角色A的移动过程。
此外,该方案还适用于一个新玩家进入时的场景,可以理解为该新玩家进入前为掉线状态。可以运用在各种类型的游戏中,如MMO、RTS、FPS等,不需要以开房间的方式同时进出,在运行时有新玩家进来时,只需要将当前场景中所有角色的信息加上最后此执行的控制指令同步给新进的角色即可,客户端快速计算出其他角色的信息。
由此,本发明可以解决lockstep的重连问题,lockstep是需要重头到尾重新快速计算一次,这样非常耗性能且非常不稳定,对于MMO这种没有一局一局概念的游戏来说,是不能实现的(如某玩家在3天前打过了一场战斗,重连上去需要计算3天的战斗逻辑)。本发明只需要把角色的状态信息后最后一个控制指令发下来,就可以同步到当前状态。
基于上述实施例提供的高效网络同步方法,本发明实施例则对应提供执行该方法的装置,参见图4所示的结构示意图,其中:
通信模块30,用于接收服务器基于第一控制指令所下发的第二控制指令,第一控制指令是由第一客户端上传至服务器的,第一客户端的玩家角色属于主动方,第一控制指令中包含针对相应玩家角色的操作动作、以及操作动作执行时的第一逻辑帧,第一逻辑帧的时间晚于第一客户端接收第一控制指令时的当前逻辑帧,第二控制指令中包含第二逻辑帧,第二逻辑帧的时间不早于第一逻辑帧;
操作执行模块20,用于通过第二逻辑帧驱动第二客户端的逻辑层执行操作动作。
可选的,操作执行模块20,还用于:
在网络状态由掉线切换为在线的情况下,向服务器上传重连请求;接收服务器基于重连请求所下发的场景信息,场景信息中包含游戏场景内各角色的状态信息、以及处于执行状态下的目标控制指令,目标控制指令中包含针对相应玩家角色的目标操作动作、以及目标操作动作执行时的目标逻辑帧;根据第二客户端的当前逻辑帧与目标逻辑帧的时间差,确定目标操作动作中未被执行的部分操作动作;通过当前逻辑帧驱动第二客户端的逻辑层执行部分操作动作,并控制第二客户端的逻辑层将部分操作动作的第二执行结果输出至第二客户端的视图层;调取第二客户端的当前视图帧,通过第二客户端的当前视图帧驱动第二客户端的视图层根据状态信息展示游戏场景、并在游戏场景中以平滑插值的方式展示第二执行结果。
基于上述各实施例提供的高效网络同步方法,本发明实施例则提供一种高效网络同步系统,该系统包括:服务器和多个客户端,一个客户端对应一个玩家角色;
玩家角色属于主动方的第一客户端执行图1所述的高效网络同步方法;玩家角色属于被动方的第二客户端执行图5所述的高效网络同步方法。
此外,服务器以被动指令的方式向各客户端下发指定逻辑的运算结果。其中,该指定逻辑包括但不局限于AI行为、技能效果、数值运算、Buff效果等服务器逻辑,这些逻辑客户端通常不做处理,除非特殊需求。计算完成后的结果,服务器以被动指令的形式发给各客户端。
以上对本发明所提供的一种高效网络同步方法、装置及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素,或者是还包括为这些过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
- 一种高效网络同步方法、装置及系统
- 一种高效的水声传感器网络时间同步方法