一种自适应处理网络延时抖动的数据同步方法及装置转让专利

申请号 : CN202110602032.9

文献号 : CN113364846B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高健健华炜李融谢天

申请人 : 之江实验室

摘要 :

本发明公开一种自适应处理网络延时抖动的数据同步方法及装置,考虑了服务器和客户端双方的时间线,将服务器某一时刻的数据帧在对应时刻同步到客户端,提高了网络数据同步的精准度;自适应调节主动延时时间,缓解网络延时抖动的影响,增加了数据同步的稳定性;动态查找时间线对齐的客户端数据帧,并且应用插值算法得到平滑的采样结果,避免客户端的数据发生跳动。该方法特别适用于在网络延时和抖动明显的情况下数据的实时同步,且对网络丢包的容忍度较高。

权利要求 :

1.一种自适应处理网络延时抖动的数据同步方法,其特征在于包括如下步骤:

S1,服务器S向客户端C发送数据包SP,所述数据包SP包括状态数据e和发送时的服务器时间st;

客户端C将收到的数据包SP存储到数据帧CP中,并设定客户端的初始主动延时时间tdelay;

S2,客户端C维护双向队列DQ,用于存储从服务器S接收到的数据,双向队列DQ的最大长度为m,m>=2;对于接收到的第i个数据包SPi,其中i∈{0,1,...},包括如下步骤:S21,如果i=0,将当前的客户端时间保存到ct0中;

S22,计算服务器时间差dsti=sti‑st0,将dsti和数据包SPi中的状态数据ei存储到数据帧CPi中;

S23,将数据帧CPi塞入双向队列DQ的尾部;如果双向队列DQ的当前长度大于m,则弹出双向队列DQ的头部元素;

S3,客户端C查询当前的客户端时间为cttick,计算当前的客户端时间差dct=cttick‑ct0‑tdelay,在双向队列DQ中查找索引位置j,满足条件dstj

1},根据查找索引j的情况,执行如下处理:

S31,如果找到满足条件的索引位置j,则根据索引位置j,通过插值方法,调整当前的客户端时间cttick对应的状态数据etick;

S32,如果找不到满足条件的索引j,并且dct

S33,如果找不到符合条件的索引j,并且dct>dstm‑1,则通过插值方法,调整当前的客户端时间cttick对应的状态数据etick。

2.根据权利要求1所述的一种自适应处理网络延时抖动的数据同步方法,其特征在于所述S31中,根据索引位置j,计算线性插值系数a=(dct‑dstj)/(dstj+1‑dstj),得到cttick时刻对应的状态数据etick=ej*(1‑a)+ej+1*a。

3.根据权利要求1所述的一种自适应处理网络延时抖动的数据同步方法,其特征在于所述S32中,调整tdelay=tdelay‑(dct‑dst0)。

4.根据权利要求1所述的一种自适应处理网络延时抖动的数据同步方法,其特征在于所述S32中,调整cttick时刻对应的状态数据etick,计算线性插值系数a=(dct–dst0)/(dst1‑dst0),得到当前的客户端时间cttick对应的状态数据etick=e0*(1‑a)+e1*a。

5.根据权利要求1所述的一种自适应处理网络延时抖动的数据同步方法,其特征在于所述S33中,调整当前的客户端时间cttick时刻对应的状态数据etick,计算线性插值系数a=(dct–dstm‑2)/(dstm‑1‑dstm‑2),得到当前的客户端时间cttick对应的状态数据etick=em‑2*(1‑a)+em‑1*a。

6.根据权利要求1所述的一种自适应处理网络延时抖动的数据同步方法,其特征在于所述状态数据e包括一组独立的状态向量s1,s2,…,sn。

7.根据权利要求6所述的一种自适应处理网络延时抖动的数据同步方法,其特征在于所述状态向量包括位置pos=(px,py,pz)和旋转四元数quat=(qx,qy,qz,qw)。

8.根据权利要求1所述的一种自适应处理网络延时抖动的数据同步方法,其特征在于所述S3中的插值方法包括线性插值和非线性插值。

9.根据权利要求1所述方法的一种自适应处理网络延时抖动的数据同步装置,包括服务器S和客户端C,其特征在于所述客户端C包括双向队列DQ和循环调用模块tick,循环调用模块tick包括查询模块、计算模块、索引位置查找模块和插值调整模块,循环调用模块tick在被调用时,通过查询模块得到当前的客户端时间cttick,通过计算模块得到当前的客户端时间差dct,通过索引位置查找模块,找到符合条件的索引位置j时,通过插值调整模块,调整当前的客户端时间cttick对应的状态数据etick;没有找到符合条件的索引位置j,且dctdstm‑1时,通过插值调整模块,调整当前的客户端时间cttick对应的状态数据etick。

10.根据权利要求9所述的一种自适应处理网络延时抖动的数据同步装置,其特征在于所述循环调用模块tick,被客户端C的主循环模块调用,根据状态更新情况,进行调用。

说明书 :

一种自适应处理网络延时抖动的数据同步方法及装置

技术领域

[0001] 本发明涉及计算机网络数据同步领域,尤其是涉及一种自适应处理网络延时抖动的数据同步方法及装置。

背景技术

[0002] 计算机网络技术自上个世纪中叶发展至今,已经取得了长足的进步,并且在诸多领域都获得了巨大的成功。其中最具代表性的互联网(Internet)技术更是将分散在全世界的计算设备融为一个有机的整体,实现了资源的全面共享和高效协作。
[0003] 要实现网络互联,必然需要在多个计算机之间进行数据传输和同步,尤其在网络条件不佳,例如网络延迟、抖动、丢包等明显的情况下,如何高效精确地同步和插值远端传输过来网络数据变成了一个十分重要的问题。常见的实体状态数据同步算法包括航位推算法和实体插值算法。航位推算法可以根据上一帧实体的姿态和速度信息预测当前的状态,但缺点是仅限于低速运动的场景,如果实体的运动速度很快或者运动状态频繁改变,预测结果就会和服务器不一致,需要进行额外校正;实体插值算法只使用服务器传过来的状态数据进行插值计算,因此准确性相对较高。但是现有的实体插值算法大多不考虑服务器和客户端的时间线对齐,只根据客户端本地数据缓存的大小动态调节插值速度。这样虽然可以让插值结果更加平滑,但同一实体在同一仿真时刻的状态在服务器和客户端可能会有所不同,这对于一些严肃的仿真应用来说是不可接受的。

发明内容

[0004] 为解决现有技术的不足,实现更好地平衡数据同步的延时性和准确度的目的,本发明采用如下的技术方案:
[0005] 一种自适应处理网络延时抖动的数据同步方法,包括如下步骤:
[0006] S1,服务器S通过网络向客户端C发送数据包SP,所述数据包SP包括状态数据e和发送时的服务器时间st;
[0007] 客户端C将收到的数据包SP经过处理存储到数据帧CP中,并设定客户端的初始主动延时时间为tdelay=0.1s;
[0008] S2,客户端C维护一个双向队列DQ,用于存储从服务器S接收到的数据,双向队列DQ的最大长度为m,m>=2;对于接收到的第i个数据包SPi,其中i∈{0,1,...},包括如下步骤:
[0009] S21,如果i=0,将当前的客户端时间保存到ct0中;
[0010] S22,计算服务器时间差dsti=sti‑st0,将dsti和数据包SPi中的状态数据ei存储到数据帧CPi中;
[0011] S23,将数据帧CPi塞入双向队列DQ的尾部;如果双向队列DQ的当前长度大于m,则弹出双向队列DQ的头部元素;
[0012] S3,客户端C存在一个循环被调用的函数tick,每次调用进行如下处理:查询当前的客户端时间为cttick,计算当前的客户端时间差dct=cttick‑ct0‑tdelay,在双向队列DQ中查找一个索引位置j,满足条件dstj
[0013] S31,如果找到满足条件的索引位置j,则根据索引位置j,通过插值方法,调整当前的客户端时间cttick对应的状态数据etick;
[0014] S32,如果找不到满足条件的索引j,并且dct
[0015] S33,如果找不到符合条件的索引j,并且dct>dstm‑1,则通过插值方法,调整当前的客户端时间cttick对应的状态数据etick。
[0016] 进一步地,所述S31中,根据索引位置j,计算线性插值系数a=(dct‑dstj)/(dstj+1‑dstj),得到cttick时刻对应的状态数据etick=ej*(1‑a)+ej+1*a。
[0017] 进一步地,所述S32中,调整tdelay=tdelay‑(dct‑dst0)。
[0018] 进一步地,所述S32中,调整cttick时刻对应的状态数据etick,计算线性插值系数a=(dct–dst0)/(dst1‑dst0),得到当前的客户端时间cttick对应的状态数据etick=e0*(1‑a)+e1*a。
[0019] 进一步地,所述S33中,调整当前的客户端时间cttick时刻对应的状态数据etick,计算线性插值系数a=(dct–dstm‑2)/(dstm‑1‑dstm‑2),得到当前的客户端时间cttick对应的状态数据etick=em‑2*(1‑a)+em‑1*a。
[0020] 进一步地,所述状态数据e包括一组独立的状态向量s1,s2,…,sn。
[0021] 进一步地,所述状态向量包括位置pos=(px,py,pz)和旋转四元数quat=(qx,qy,qz,qw)。
[0022] 进一步地,所述S3中的插值方法包括线性插值和非线性插值。
[0023] 一种自适应处理网络延时抖动的数据同步装置,包括服务器S和客户端C,所述客户端C包括双向队列DQ和循环调用模块tick,循环调用模块tick包括查询模块、计算模块、索引位置查找模块和插值调整模块,循环调用模块tick在被调用时,通过查询模块得到当前的客户端时间cttick,通过计算模块得到当前的客户端时间差dct,通过索引位置查找模块,找到符合条件的索引位置j时,通过插值调整模块,调整当前的客户端时间cttick对应的状态数据etick;没有找到符合条件的索引位置j,且dctdstm‑1时,通过插值调整模块,调整当前的客户端时间cttick对应的状态数据etick。
[0024] 进一步地,所述循环调用模块tick,被客户端C的主循环模块调用,根据状态更新情况,进行调用。
[0025] 本发明的优势和有益效果在于:
[0026] 本发明公考虑了服务器和客户端双方的时间线,将服务器某一时刻的数据帧在对应时刻同步到客户端,提高了网络数据同步的精准度;自适应调节主动延时时间,缓解网络延时抖动的影响,增加了数据同步的稳定性;动态查找时间线对齐的客户端数据帧,并且应用插值算法得到平滑的采样结果,避免客户端的数据发生跳动。本发明特别适用于在网络延时和抖动明显的情况下,数据的实时同步,且对网络丢包的容忍度较高。

附图说明

[0027] 图1为本发明的方法流程图。
[0028] 图2为本发明中算法示意图。
[0029] 图3为本发明的应用效果图。

具体实施方式

[0030] 以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
[0031] 如图1、2所示,本发明提出了一种自适应处理网络延时抖动的服务器与客户端的数据同步方法,该方法在仿真中考虑服务器和客户端双方的时间线,提高了网络数据同步的精准度;同时采用主动延时的策略,并且在相邻同步时刻之间应用插值算法,得到平滑的插值采样结果,包括以下步骤:
[0032] (1)服务器S通过网络向客户端C发送数据包SP,SP包含了状态数据e和发送时的服务器时间st;其中e由2个独立的状态向量组成,依次为位置pos=(px,py,pz)和旋转四元数quat=(qx,qy,qz,qw);客户端将收到的数据包SP经过处理存储到数据帧CP中;设客户端的初始主动延时时间为tdelay=0.1s;
[0033] (2)客户端C维护一个双向队列DQ,用来存储从服务器S接收到的数据;DQ的最大长度为8;对于接收到的第i个数据包SPi,其中i∈{0,1,...},进行如下处理:
[0034] (2.1)如果i=0,将当前的客户端时间保存到ct0中;
[0035] (2.2)计算服务器时间差dsti=sti‑st0,将dsti和数据包SPi中的状态数据ei存储到数据帧CPi中;
[0036] (2.3)将CPi塞入DQ的尾部;如果DQ的当前长度大于8,则弹出DQ的头部元素;
[0037] (3)客户端C存在一个循环被调用的函数tick,每次调用进行如下处理:
[0038] (3.1)查询当前的客户端时间为cttick,计算当前的客户端时间差dct=cttick‑ct0‑tdelay;在DQ中查找一个索引位置j,满足条件dstj
[0039] (a)如果找到满足条件的索引j,计算线性插值系数a=(dct‑dstj)/(dstj+1‑dstj),得到cttick时刻对应的状态数据etick=ej*(1‑a)+ej+1*a;
[0040] (b)如果找不到满足条件的索引j,并且dct
[0041] (c)如果找不到符合条件的索引j,并且dct>dst7,计算线性插值系数a=(dct–dst6)/(dst7‑dst6),得到cttick时刻对应的状态数据etick=e6*(1‑a)+e7*a;
[0042] 最终的网络数据同步结果如图3所示,场景中的行人和机动车都是从服务器传过来的实体。首先通过本方法对这些实体的位置和姿态进行准确平滑的插值,然后渲染得到最终的画面。
[0043] 以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的范围。