本发明属于涉及数据协同一致性技术领域,具体涉及一种基于ast的应用于vr会议协同白板编辑任务的方法。
背景技术:
vr起源于美国,目前该领域的基础研究主要集中在感知、用户界面、后台软件和硬件四个方面。它利用计算机生成一种模拟环境,使得人们可以在虚拟的世界中进行探索和互动。与静态图片不同的是,vr计算机图像是实时动态的3d立体逼真图像,是对真实物体和场景的模拟。在3d虚拟现实中,与计算机的交互从纯粹的视觉交互扩展到各种交互,用户可以应用感知体验和认知处理能力,与虚拟现实中的对象进行交互。目前,随着虚拟现实技术的不断革新,已经广泛运用在医学、教育、工业仿真、游戏等领域中。由于虚拟现实可以构建多感官虚拟环境,因此它比其他一些计算机辅助材料更具“沉浸感”,对学生的学习、员工的工作会议产生更大的影响。。vr课堂(会议室)的应用研究近些年随着计算机以及多媒体技术的普及和提高,为工作学习带来了新的手段和方法,同时因为其沉浸性、真实性的优势,备受欢迎,但目前受限于网络及设备,这方面的研究应用目前还不成熟。
vr场景下的白板协同编辑技术,目前尚未有过研究,但电脑端在线协同图像编辑技术通常有三种实现方式,一、通过建立专用服务器和客户端,采用同步作业方式,完成绘画任务。好处在于每个客户端看到的画面完全一致,缺点在于每个客户端需要获得画笔才能进行绘画任务,严重影响协作效率。二、通过建立专用服务器和客户端,采用异步作业方式,每个客户端有各自的画笔,当客户端有画笔操作时,传递数据给服务器,服务器做数据转发到客户端,客户端直接将数据进行叠加。好处在于每个客户端异步操作,互不影响,缺点在于当对于画板同一位置进行操作时,会出现多客户端画面不一致的情况。三、在方法二的基础上,使用协同编辑算法,确保用户的因果、意图、结果一致性。
协同编辑常用概念:
因果关系:给定任意两个位于站点i和站点j的操作
①i=j,
②i≠j,
③存在操作
并发关系:给定任意两个操作
一致性cci模型:因果一致性、结果一致性、操作意图一致性。
ast算法是满足cci模型的一种维护协同一致性的算法。ast算法的核心在于标记和回溯(mark&retrace),当处理并发操作时,并不需要转换操作,而是将文档的地址空间回溯到操作产生时的状态,在该状态下执行操作可以获取正确的执行位置.这种方法可以保证当所有的操作在各站点执行结束后,各站点线性结构存储的操作字符的顺序是一致的,从而满足cci模型。同时ast算法的时间复杂度只与站点个数有关,而与操作数无关,非常适合于同一场景的大量协同编辑工作。
技术实现要素:
本发明提供了一种基于ast的应用于vr会议协同白板编辑任务的方法,该方法对vr场景下的协同场景——白板协同编辑提供了一种解决方案。本发明的技术方案具体介绍如下。
一种基于ast的应用于vr会议协同白板编辑任务的方法,其包括服务器部分和客户端部分;
服务器部分:服务器自定义数据结构存储远程客户端传递的消息序列,对于收到的消息类型做判断:如果是新用户加入消息,将对应数据发送给新加入的客户端;如果是数据转发消息,则同时转发消息给现存所有客户端;
客户端部分:客户端收到本地消息,则立刻执行本地消息;收到远程消息,若是因果后序消息立刻执行,否则回溯到最近的因果后序消息按客户端顺序重新执行所有操作。
本发明中,服务器存储数据结构为定时texture+远程操作序列;客户端传递的消息序列结构为状态向量+操作行为的序列。
本发明中,服务器收到的消息通过操作码0/1判断消息类型。
本发明提供的方法,还包括步骤:
(1)服务器收到消息时,如果是消息转发数据,将数据存储在服务器缓存;
(2)服务器收到消息时,如果是新用户加入消息,将缓存中的数据发送给新客户端;
(3)客户端本地白板协同编辑操作,立即执行,同时将操作数据发送到服务器;
(4)客户端收到远程消息,对消息做判断,如果是远程同步消息,做因果顺序的判断,再做执行;如果是新用户加入消息,更新本地状态向量。
本发明提供的方法,还包括步骤:
(1)服务器收到新用户加入消息,将存储的定时texture+远程操作序列传递给新用户客户端,新用户客户端收到消息,将本地texture替换为定时texture,同时执行远程操作序列;
(2)客户端收到远程同步消息,多消息做解析,判断消息的状态向量与本地状态向量之间的关系,如果是因果先序关系,立即执行消息操作,否则回溯到操作发生时的状态,依次操作;
(3)客户端收到新用户加入消息,将本地状态向量size+1,同时末尾置0。
和现有技术相比,本发明的有益效果是:
本发明提供了一种基于ast的应用于vr会议协同白板编辑任务的方法,解决了vr场景下白板协同编辑的实现问题。该方法的运行效率只取决于站点数量,而与操作数无关,避免因长时间协同编辑导致运行效率下降、用户延迟高的问题。同时方法中服务器只做消息转发,方法逻辑大部分在客户端,这样大大降低了服务器的负载,将压力分摊到每个客户端,对于大规模多用户在vr场景下操作应用的流畅性提供了保障,有利于很好的在vr场景中完成多人白板协同编辑的任务。
附图说明
图1为主体方法流程图。
图2为存储结构解释图。
具体实施方式
下面结合附图和实施例对本发明的方法做进一步说明。
本发明方法包括服务器算法和客户端算法两部分。其中服务器算法,负责管理新用户加入及远程数据接收处理的逻辑;客户端算法,负责管理本地客户端执行本地及远程编辑操作,保证数据的一致性。
vr场景的白板协同编辑与普通图像协同编辑的区别在于操作方式及冲突类型。vr场景下的协同编辑有两种操作方式,一种是使用远程射线点击白板完成编辑,另一种是手执画笔完成编辑。而冲突类型因为白板画面可覆盖的特点,存在4种主要的操作并发冲突,为兼容操作、同位置插入、同位置插入擦除、同位置擦除操作。
本发明为了解决如上并发冲突操作,提供的基于ast算法的应用于vr会议室白板协同编辑任务的方法,分为服务器部分和客户端部分。服务器部分主要负责消息转发和处理新用户加入时的操作处理,另外服务器还会存储部分数据。客户端主要负责白板编辑及数据协同一致性,每个客户端都设有自己的存储数据结构负责存储自身的状态向量序列等同步数据。服务器的存储模型包括:
1.现存客户端数量;
2.远程客户端传递的消息序列(按到达服务器的时间顺序);
3.定时texture。
客户端的存储模型包括:
操作码(供服务器和客户端区分消息类型)+状态向量(时间戳)+实际传递的消息(画笔颜色+两个点的坐标+操作类型(插入/删除))+有效性判断标志flag
本发明提供的一种基于ast的应用于vr会议室白板协同编辑任务的方法,包括两种场景。
场景一:无新用户加入:
步骤1,各独立客户端已经连接服务器并进入同一个会议室房间
步骤2,服务器发送消息告诉各个客户端现存客户端数量。每个客户端的初始状态向量的各分量值都为0,记为
步骤3,客户端执行作画操作,本地操作立即执行同步到本地画板,同时发送包含操作码(0/1)+本地状态向量
步骤4,服务器收到消息做判断,为数据转发消息,则立即将发送客户端传递的消息转发至除发送客户端之外的所有已存客户端。
步骤5,客户端收到远程消息做判断,为服务器的数据转发消息,则将远程消息中的状态向量与本地状态向量作对比。执行条件如下:
假设操作m是来自站点m的操作,相应的状态向量为
1.
2.
若满足执行条件,则判断本地状态向量与远程消息状态向量的关系,若是远程消息的因果先序操作,则该远程操作立即执行,并且将消息加入到本地消息缓存队列的尾部,同时更新本地状态向量;否则回溯本地状态向量序列至最近的该远程操作的因果先序操作;同时在执行操作之前,对于多个并发操作,引入torder函数来判断两个并发操作的全序关系,用来保证严格的作画意图一致性;torder定义如下:
考虑两个操作
(1)
(2)
若并发操作全序大于此操作,则将并发操作有效性标志置为false,同时撤销对画板画面的影响。待此操作执行完成后,恢复有效性为false的所有操作对画面的影响,同时设置有效性判断标志flag为true。
若不满足执行条件,则消息不执行,直接将消息加入到本地消息缓存队列的尾部。
场景二:有新用户加入:
步骤6,新客户端加入时,发一个新客户端加入的消息给服务器。
步骤7,服务器收到消息做判断,为新客户端加入消息,将状态向量的size加1,同时广播给所有客户端,并将服务器存储的定时texture和远程客户端传递的消息序列发送给新加入的客户端。
步骤8,新客户端收到消息,将texture替换本地现有texture,同时按顺序执行消息序列中的操作,同时更新本地状态向量序列。
具体流程图如图1所示。
实施例1:无新用户加入时的实施方式
步骤如下:
(1)各个客户端与服务器建立连接(p1),并进入同一个房间,客户端持续监听服务器端的消息;
(2)客户端本地白板编辑,可以拿起不同的画笔/橡皮擦,在执行编辑操作时,本地状态向量在对应站点+1,同时将当前状态向量、操作码(0)、操作行为(两个坐标点+当前编辑状态)作为消息,发送给服务器(c2),待服务器处理,并且本地操作序列(状态向量+操作行为)存储本次操作。
(3)服务器收到客户端的消息,做解析(s1),操作码为0,为远程同步消息(s2),将操作部分(状态向量+操作行为)保存到服务器缓存中,同时转发消息至除发送客户端之外的全部客户端。
(4)客户端收到服务器端的消息,做判断(c3),为远程同步消息,将远程消息的状态向量a与本地最近状态向量b作比较:如果a是b的因果后续操作,那么远程消息解析的操作直接在本地客户端执行,同时将此远程消息的操作加入到本地客户端操作序列;如果a是b的并发关系操作或因果先序操作,我们首先需要回溯到并发操作执行之时的白板状态:对于客户端存储的操作节点序列进行扫描,通过时间戳的比较判断此操作节点是否为当前操作的因果先序操作,若不是则将该操作节点值设为无效。随后我们依据不同的冲突类型,提出对应的解决方案。
解决方法:执行该操作之后,恢复操作节点值设为无效的操作,恢复到当前白板状态。
依据:兼容操作因为并发操作的位置并没有图形重叠覆盖,并发操作之间无论执行顺序如何都能保证结果一致性,但为了保证操作意图一致性,需要将客户端存储的操作序列排序。
解决方法:根据torder顺序执行所有并发操作,恢复到当前白板状态。
依据:同位置插入时,如不进行处理,会出现图形重叠位置各客户端不一致的冲突情况,根据torder得到的操作全序关系,进行执行,保证了所有客户端的一致性。
解决方法:判断插入、擦除操作重叠区域,擦除操作仅执行非重叠部分,插入操作按同位置插入算法进行处理。
依据:并发操作中擦除操作的前提是根据已有的图形,做出擦除行为,若并发操作中既有擦除又有插入,用户在擦除行为时,并不知道在该位置存在并发的插入操作,故将所有并发操作中的插入操作保留,擦除操作仅执行非重叠部分的擦除任务。
解决方法:n次擦除操作无需判断,直接执行,同时恢复操作节点值设为无效的操作,恢复到当前白板状态。
依据:并发的同位置擦除操作,不涉及图形的重叠覆盖问题,所以可以直接执行,无需判断。
实施例2:新用户加入时的实施方式
步骤如下:
(1)新用户连接服务器,并发送消息告诉服务器端。
(2)服务器端收到消息,判断为新用户加入消息,此时向该客户端传递定时texture+现存操作序列;同时向其他客户端广播新客户端加入的消息。
(3)新客户端收到服务器端消息,将服务器传来的texture替换本地texture,同时将收到的操作序列依次执行。
(4)其他客户端收到服务器消息,判断为新用户加入消息,此时将本地状态向量的size+1,同时最后一位置0。
(5)之后的所有操作如实施例1。
本发明提供的一种基于ast的应用于vr会议协同白板编辑任务的方法,解决了vr场景下白板协同编辑的实现问题。该方法的运行效率只取决于站点数量,而与操作数无关,避免因长时间协同编辑导致运行效率下降、用户延迟高的问题。同时方法中服务器只做消息转发,方法逻辑大部分在客户端,这样大大降低了服务器的负载,将压力分摊到每个客户端,对于大规模多用户在vr场景下操作应用的流畅性提供了保障,有利于很好的在vr场景中完成多人白板协同编辑的任务。