客户端和服务器同步方法和装置制造方法
【专利摘要】本申请提供了客户端和服务器同步的方法和装置。该方法包括:客户端在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,从所述当前位置开始依据移动方向开始移动;服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,是则从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色;否则将移动包携带的同步点记录至同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色。本发明实现了客户端和服务器控制的玩家角色位移同步,避免网络延迟带来的玩家操作反馈延迟现象。
【专利说明】客户端和服务器同步方法和装置
【技术领域】
[0001]本申请涉及网络技术,特别涉及客户端和服务器同步方法和装置。
【背景技术】
[0002]在实时网络游戏中,需要及时反馈玩家的输入,比如:玩家按下某个键后需要立即进行移动操作。
[0003]目前,常用的及时反馈玩家输入的做法是由客户端立即处理玩家的输入(类似单机游戏),这种做法反馈非常及时,也能使游戏比较流畅。但是,这种做法很容易作弊,外挂通过模拟发包会达到同样的效果,而服务器又缺少有效的防护机制(大部分结果都是客户端计算的),因此采用这种做法在网络游戏中会有较大风险。
[0004]基于此,一种改进的做法是服务器验证机制,具体为:
[0005]客户端发包给服务器,服务器会有相应的验证机制来检测客户端发来的包是否合法,如果合法,服务器进行相应的逻辑处理后再发包通知给客户端,这个方法可以非常有效的避免外挂。
[0006]但是,服务器验证机制非常依赖网络的传输速度,而网络传输速度的影响会带来延迟,如果网络延迟较大则玩家的操作反馈会有很明显的延迟现象。
【发明内容】
[0007]本申请提供了客户端和服务器同步方法和装置,能够避免网络延迟带来的玩家操作反馈延迟现象。
[0008]本申请提供的技术方案包括:
[0009]一种客户端和服务器同步的方法,包括:
[0010]客户端在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,并从所述当前位置开始依据移动方向开始移动;
[0011]服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,
[0012]如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;
[0013]如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
[0014]一种客户端和服务器同步的装置,该装置应用于客户端,包括:
[0015]检测单元,用于在客户端检测移动触发;
[0016]同步单元,用于在所述检测单元检测到移动触发时,从所述当前位置开始依据移动方向开始移动,并将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,以使服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
[0017]一种客户端和服务器同步的装置,该装置应用于服务器,包括:
[0018]接收单元,用于接收来自客户端的移动包,所述客户端是在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送的;
[0019]识别单元,用于识别已建立的同步点列表是否为空,
[0020]如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;
[0021]如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
[0022]由以上技术方案可以看出,本发明中,通过客户端在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,并从所述当前位置开始依据移动方向开始移动;以及服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。这实现了客户端和服务器控制的玩家角色位移同步,能够避免网络延迟带来的玩家操作反馈延迟现象。
【专利附图】
【附图说明】
[0023]图1为本发明实施例提供的方法流程图;
[0024]图2为本发明实施例提供的装置结构图;
[0025]图3为本发明实施例提供的另一装置结构图。
【具体实施方式】
[0026]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0027]玩家移动是游戏中最普遍和频繁的操作,通过本发明提供的方法能够避免网络延迟带来的玩家操作反馈延迟现象。
[0028]下面对本发明提供的方法进行描述:
[0029]参见图1,图1为本发明实施例提供的方法流程图。如图1所示,该流程可包括以下步骤:
[0030]步骤101,客户端在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,并从所述当前位置开始依据移动方向开始移动。
[0031]这里,所述移动触发用于触发客户端和服务器分别控制的玩家角色进行位移同步。优选地,作为本发明的一个实施例,所述移动触发可包括以下至少一个情况:
[0032]情况I,移动输入指令:
[0033]当玩家需要移动时,玩家会通过控制一些移动键比如WSAD键位(包括比如,上、下、左、右键)来操作本玩家角色沿上、下、左、右四个方向移动,该控制移动键的操作就相当于一个移动输入指令,相应地,该移动方向也就是该移动键对应的方向。
[0034]情况2,玩家角色保持一个方向移动超过设定时间:
[0035]这里,设定时间具体设置时可依据实际情况设置,比如设置为I秒,或者其它值
坐寸ο
[0036]本发明中,如果玩家角色保持一个方向一直移动,则每隔设定时间客户端和服务器分别控制的玩家角色会进行位移同步,也即,保持一个方向移动设定时间,就相当于一次移动触发,相应地,该移动方向也就是该保持的移动方向。
[0037]3,玩家角色的移动方向发生改变:
[0038]本发明中,如果客户端检测到玩家角色出现转向,则客户端和服务器分别控制的玩家角色会进行位移同步,也即,玩家角色发生转向相当于一次移动触发,相应地,该移动方向也就是转变后的移动方向。
[0039]步骤102,服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,如果是,执行步骤103,如果否,执行步骤104。
[0040]这里,同步点列表可预先建立,在建立时为空。
[0041]步骤103,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端。
[0042]本步骤103是在同步点列表为空的情况下执行的。其中,同步点列表为空主要分为以下两种情况:1,该移动包是在同步点列表初始建立后发送的;2,客户端和服务器之间没有网络延迟,客户端发送的移动包都被服务器及时处理,客户端和服务器分别控制的玩家角色位移比较同步。但不管哪一种情况,当服务器收到移动包后,都会执行步骤103。
[0043]步骤104,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
[0044]本步骤104是在同步点列表不为空的情况下执行的。之所以会出现同步点列表不为空的情况,主要原因是:网络延迟导致客户端发送的移动包数量较多,服务器处理移动包的速度偏慢。
[0045]针对这种原因,本步骤104中,所述按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间进行移动可包括:
[0046]提高本服务器控制的玩家的移动速度,该移动速度高于客户端中玩家的移动速度;
[0047]通过提高后的移动速度从最先记录至同步点列表的同步点开始按照同步点记录至同步点列表的时间先后顺序在同步点之间进行直线移动。[0048]在上面描述中,提高本服务器控制的玩家角色的移动速度为多少,可根据实际需求而定,本发明并不具体限定,只要能够保证该提高后的移动速度高于客户端控制的玩家角色的移动速度即可,这类似于播放音乐的快进功能,能够比较快地达到和客户端控制的玩家角色保持同步的效果。
[0049]至此,完成图1所示的流程。
[0050]目前,在网络游戏中,技能使用也是很频繁的操作,这也需要客户端和服务器分别控制的玩家角色进行技能同步。优选地,作为本发明的一个实施例,该技能同步通过客户端向服务器发送技能包实现。
[0051]但是,如果技能的使用频率过快,客户端和服务器之间同步的技能包数量将会非常大。比如:在某些射击游戏中,玩家通过按下鼠标左键开始射击,松开左键则结束射击,同时玩家可以通过WASD移动和鼠标来控制攻击方向,其中每发射一次就是一次技能输入,而发射的频率通常是非常快的,如果每发射一次客户端都发送技能包,则会导致服务器下行流量会非常大。
[0052]基于此,本发明分析技能,发现技能是通过时间帧组织的,而通过时间帧组织的技能并非需要客户端在每个时间帧时发送技能包。以一个10帧技能为例,该10帧技能在第I帧生成,在第5帧产生判定伤害,其中,在第I帧至第4帧,其没有必要客户端和服务器分别控制的玩家角色进行技能同步,而实际上需要同步的的点就是在第5帧生成判定的时候,因为只有在第5帧,服务器才会需要根据玩家角色的移动方向和位置来计算是否命中目标。基于此,本发明中,就预先根据技能的属性去指定各个技能所要求的需要同步的时间帧。
[0053]如此,当客户端检测到技能指令(这里,所述技能指令包含:技能标识、该技能标识对应的技能所要求的需要同步的时间帧)时,客户端会依据所述技能指令包含的技能标识对本客户端控制的玩家角色执行对应的技能,并将所述技能指令、以及本客户端控制的玩家角色的当前角度同步给服务器;优选地,作为本发明的一个实施例,客户端可将所述技能指令、以及本客户端控制的玩家角色的当前角度一起携带在技能包中同步给服务器。下文均以客户端可将所述技能指令、以及本客户端控制的玩家角色的当前角度一起携带在技能包中同步给服务器为例描述。
[0054]服务器接收技能包,所述技能指令包含的时间帧到达之前,暂停对本服务器控制的玩家角色执行任何技能,在时间帧到达时依据所述技能指令包含的角度对本服务器控制的玩家角色执行所述技能指令包含的技能标识对应的技能。这样,能够保证客户端和服务器分别控制的玩家角色技能同步。之后,服务器就基于图1确定出玩家角色的移动方向和位置来判定该同步的技能是否成功,比如,技能为射击,则服务器就基于图1确定出玩家角色的移动方向和位置来判定该射击是否命中目标。
[0055]以上对本发明提供的方法进行了描述,下面对本发明提供的装置进行描述:
[0056]参见图2,图2为本发明实施例提供的装置结构图。该装置应用于客户端,如图2所示,该装置可包括:
[0057]检测单元,用于在客户端检测移动触发;
[0058]同步单元,用于在所述检测单元检测到移动触发时,从所述当前位置开始依据移动方向开始移动,并将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,以使服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
[0059]优选地,作为本发明的一个实施例,所述移动触发为移动输入指令,所述移动方向为所述移动输入指令携带的移动方向;
[0060]和/ 或,
[0061]所述移动触发为玩家角色保持一个方向移动超过设定时间;所述移动方向为该保持的方向;
[0062]和/ 或,
[0063]所述移动触发为玩家角色移动的方向发生改变;所述移动方向为改变后的移动方向。
[0064]优选地,作为本发明的一个实施例,所述检测单元进一步在客户端端检测技能指令,所述技能指令包含:技能标识、该技能标识对应的技能所要求的需要同步的时间帧;
[0065]所述同步单元进一步依据所述技能指令包含的技能标识对本客户端控制的玩家角色执行对应的技能,并将所述技能指令、以及本客户端控制的玩家角色的当前角度同步给服务器;以使服务器在所述技能指令包含的时间帧到达之前,暂停对本服务器控制的玩家角色执行任何技能,在时间帧到达时依据所述技能指令包含的角度对本服务器控制的玩家角色执行所述技能指令包含的技能标识对应的技能。
[0066]至此,完成图2所示的装置描述。
[0067]本发明还提供了另一种装置结构。参见图3,图3为本发明实施例提供的另一种装置结构图。该装置应用于服务器,如图3所示,该装置可包括:
[0068]接收单元,用于接收来自客户端的移动包,所述客户端是在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送的;
[0069]识别单元,用于识别已建立的同步点列表是否为空,
[0070]如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;
[0071]如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
[0072]优选地,作为本发明的一个实施例,所述按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间进行移动包括:
[0073]提高本服务器控制的玩家角色的移动速度,该移动速度高于客户端控制的玩家角色的移动速度;
[0074]通过提高后的移动速度从最先记录至同步点列表的同步点开始按照同步点记录至同步点列表的时间先后顺序在同步点之间进行直线移动。[0075]优选地,作为本发明的一个实施例,所述接收单元进一步接收来自客户端发送的技能指令、以及本客户端控制的玩家角色的当前角度;所述客户端检测到技能指令后将所述技能指令、以及本客户端控制的玩家角色的当前角度同步给所述装置;所述技能指令包含:技能标识、该技能标识对应的技能所要求的需要同步的时间帧;
[0076]所述识别单元进一步在所述技能指令包含的时间帧到达之前,暂停对本服务器控制的玩家角色执行任何技能,在时间帧到达时依据所述技能指令包含的角度对本服务器控制的玩家角色执行所述技能指令包含的技能标识对应的技能。
[0077]至此,完成本发明提供的装置描述。
[0078]由以上技术方案可以看出,本发明中,通过客户端在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,并从所述当前位置开始依据移动方向开始移动;以及服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。这实现了客户端和服务器控制的玩家角色位移同步,能够避免网络延迟带来的玩家操作反馈延迟现象。
[0079]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种客户端和服务器同步的方法,其特征在于,该方法包括: 客户端在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,并从所述当前位置开始依据移动方向开始移动; 服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空, 如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端; 如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
2.根据权利要求1所述的方法,其特征在于,所述移动触发为移动输入指令,所述移动方向为所述移动输入指令携带的移动方向; 和/或, 所述移动触发为玩家角色保持一个方向移动超过设定时间;所述移动方向为该保持的方向; 和/或, 所述移动触发为玩家角 色移动的方向发生改变;所述移动方向为改变后的移动方向。
3.根据权利要求1或2所述的方法,其特征在于,所述按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间进行移动包括: 提高本服务器控制的玩家角色的移动速度,该移动速度高于客户端控制的玩家角色的移动速度; 通过提高后的移动速度从最先记录至同步点列表的同步点开始按照同步点记录至同步点列表的时间先后顺序在同步点之间进行直线移动。
4.根据权利要求1所述的方法,其特征在于,该方法进一步包括: 客户端检测技能指令,所述技能指令包含:技能标识、该技能标识对应的技能所要求的需要同步的时间帧; 客户端依据所述技能指令包含的技能标识对本客户端控制的玩家角色执行对应的技能,并将所述技能指令、以及本客户端控制的玩家角色的当前角度同步给服务器; 服务器在所述技能指令包含的时间帧到达之前,暂停对本服务器控制的玩家角色执行任何技能,在时间帧到达时依据所述技能指令包含的角度对本服务器控制的玩家角色执行所述技能指令包含的技能标识对应的技能。
5.一种客户端和服务器同步的装置,其特征在于,该装置应用于客户端,包括: 检测单元,用于在客户端检测移动触发; 同步单元,用于在所述检测单元检测到移动触发时,从所述当前位置开始依据移动方向开始移动,并将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送给服务器,以使服务器接收到来自客户端的移动包时,识别已建立的同步点列表是否为空,如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端;如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
6.根据权利要求5所述的装置,其特征在于,所述移动触发为移动输入指令,所述移动方向为所述移动输入指令携带的移动方向; 和/或, 所述移动触发为玩家角色保持一个方向移动超过设定时间;所述移动方向为该保持的方向; 和/或, 所述移动触发为玩家角色移动的方向发生改变;所述移动方向为改变后的移动方向。
7.根据权利要求5所述的装置,其特征在于, 所述检测单元进一步在客户端端检测技能指令,所述技能指令包含:技能标识、该技能标识对应的技能所要求的需要同步的时间帧; 所述同步单元进一步依据所述技能指令包含的技能标识对本客户端控制的玩家角色执行对应的技能,并将所述技能指令、以及本客户端控制的玩家角色的当前角度同步给服务器;以使服务器在所述技能指令包含的时间帧到达之前,暂停对本服务器控制的玩家角色执行任何技能,在时间帧到达时依据所述技能指令包含的角度对本服务器控制的玩家角色执行所述技能指令包含的技能标识对应的技能。
8.一种客户端和服务器 同步的装置,其特征在于,该装置应用于服务器,包括: 接收单元,用于接收来自客户端的移动包,所述客户端是在检测到移动触发时,将触发的移动方向、以及本客户端控制的玩家角色的当前位置作为同步点一起携带在移动包中发送的; 识别单元,用于识别已建立的同步点列表是否为空, 如果是,从所述移动包携带的同步点开始按照移动包携带的移动方向移动本服务器控制的玩家角色,并反馈给其它相关客户端; 如果否,将所述移动包携带的同步点记录至所述同步点列表中,按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间移动本服务器控制的玩家角色,并反馈给其它相关客户端。
9.根据权利要求8所述的装置,其特征在于,所述按照同步点记录至同步点列表的时间先后顺序在同步点列表记录的同步点之间进行移动包括: 提高本服务器控制的玩家角色的移动速度,该移动速度高于客户端控制的玩家角色的移动速度; 通过提高后的移动速度从最先记录至同步点列表的同步点开始按照同步点记录至同步点列表的时间先后顺序在同步点之间进行直线移动。
10.根据权利要求8所述的装置,其特征在于, 所述接收单元进一步接收来自客户端发送的技能指令、以及本客户端控制的玩家角色的当前角度;所述客户端检测到技能指令后将所述技能指令、以及本客户端控制的玩家角色的当前角度同步给所述装置;所述技能指令包含:技能标识、该技能标识对应的技能所要求的需要同步的时间帧; 所述识别单元进一步在所述技能指令包含的时间帧到达之前,暂停对本服务器控制的玩家角色执行任何技能,在时间帧到达时依据所述技能指令包含的角度对本服务器控制的玩家角色 执行所述技能指令包含的技能标识对应的技能。
【文档编号】H04L29/08GK103701918SQ201310750614
【公开日】2014年4月2日 申请日期:2013年12月31日 优先权日:2013年12月31日
【发明者】龚静 申请人:北京像素软件科技股份有限公司