【技术实现步骤摘要】
一种基于操作转换的文本编辑实时协同方法
本专利技术涉及计算机支持的协同领域,尤其涉及一种基于操作转换的文本编辑实时协同方法。
技术介绍
公知,协同编辑是计算机支持的协同工作中的一个重要应用领域。协同编辑作为一种分布式系统,允许地理位置上分散的用户共同编辑同一对象。为了实现实时协同编辑,每个站点都复制了一个相同的对象,以便达到最短的操作响应时间。然而在网络环境下,不同用户的操作必然会发生冲突,并发控制方法就是为了解决高并发情况下的冲突事件能够无冲突的执行,达成共同的目标。目前实时协同编辑工作中并发控制策略的主要使用的是操作转换(OperationalTransformatiopn,OT)的方法。OT是一种乐观的并发控制方法,允许冲突的发生,通过把操作转换成另一种执行形式得到一致的结果。具体来说,对本地操作立即执行,因此能够很好的满足实时性的要求;对接收到的远程操作,首先要将该操作对已执行的并发操作进行转换,然后才执行转换的结果。OT能够确保即使在不同站点执行的操作顺序不同,最终也能得到一致的结果。OT从协同编辑系统中抽象出两个元操作(插入操作,删除操作),并且认为操作的对象是线性排列结构。最初提出的OT算法被应用于协同文本编辑,即操作的对象是文本对象(字符)。实际上,由于OT转换的是操作对象的位置,OT可以支持任何线性排列的复杂对象。本专利技术提出的OT算法同样可以适用于其他复杂对象的协同。OT算法通常包含操作转换函数和控制过程。操作转换函数负责定义操作之间如何转换,控制过程主要负责定义某个该操作与哪些操作进行转换。基于Lamport定义的“happened ...
【技术保护点】
一种基于操作转换的文本编辑实时协同方法,其特征在于:包括如下步骤:所述协同编辑系统中的每个站点都包括接受队列,等待队列,执行队列;步骤1:每个站点产生的操作在该站点立即执行,并将该操作加入执行队列,同时将该操作发送到其他站点;步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中;步骤3:每个站点根据操作规则在执行队列中找出与该操作具有并发关系的操作;步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式;步骤5:执行转换后的操作并将该操作加入到执行队列;步骤6:完成协同编辑。
【技术特征摘要】
1.一种基于操作转换的文本编辑实时协同方法,其特征在于:包括如下步骤:所述协同编辑系统中的每个站点都包括接受队列,等待队列,执行队列;步骤1:每个站点产生的操作在该站点立即执行,并将该操作加入执行队列,同时将该操作发送到其他站点;步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中;步骤3:每个站点根据操作规则在执行队列中找出与该操作具有并发关系的操作;步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式;步骤5:执行转换后的操作并将该操作加入到执行队列;步骤6:完成协同编辑;所述的找出与该操作具有并发关系的操作的规则为:包含转换用IT表示,排斥转换用ET表示;对于任何一个操作o,o.t表示操作的类型:插入记为Ins、删除记为Del,o.c表示操作的作用字符,o.p表示操作的位置,o.id表示产生该操作的站点标识,o.dn表示与之转换的删除操作位置小于p的数目;操作的包含转换或者排斥转换只会改变o.p的值,其他属性保持不变;每个站点维护一个字典Dic,用于查询o1在对o2进行包含转换IT(o1,o2)之前的位置,其中o1为插入操作,o2为删除操作,字典的关键字为<idnex1,idnex2>的二元组,值为o1在对o2进行包含转换之前的p;idnex1为操作o1在执行队列中的位置,idnex2为操作o2在执行队列中的位置;1.当o1.t=Ins,o2.t=Ins;如果o1.p<o2.p,则IT(o1,o2)=Ins(p1,c1,id1,dn1);如果o1.p=o2.p并且o1.dn<o2.dn,则IT(o1,o2)=Ins(p1,c1,id1,dn1);如果o1.p=o2.p并且o1.dn=o2.dn和o1.id<o2.id,则IT(o1,o2)=Ins(p1,c1,id1,dn1);如果o1.p>o2.p,则IT(o1,o2)=Ins(p1+1,c1,id1,dn1);如果o1.p=o2.p并且o1.dn>o2.dn,则IT(o1,o2)=Ins(p1+1,c1,id1,dn1);如果o1.p=o2.p并且o1.dn=o2.dn和o1.id>o2.id,则IT(o1,o2)=Ins(p1+1,c1,id1,dn1);2.当o1.t=Ins,o2.t=Del;如果o1.p≤o2.p,则IT(o1,o2)=Ins(p1,c1,id1,dn1);如果o1.p>o2.p,则IT(o1,o2)=Ins(p1-1,c1,id1,dn1+1);Dic<index1,index2>=o1.p;3.当o1.t=Del,o2.t=Ins;如果o1.p<o2.p,则IT(o1,o2)=Del(p1);如果o1.p≥o2.p,则IT(o1,o2)=Del(p1+1);4.当o1.t=Del,o2.t=Del;如果o1.p<o2.p,则IT(o1,o2)=Del(p1);如果o1.p>o2.p,则IT(o1,o2)=Del(p1-1);如果o1.p=o2.p,则IT(o1,o2)=Nop;其中Nop表示空操作;5.当o1.t=Ins,o2.t=Ins;如果o1.p≤o2.p,则ET(o1,o2)=Ins(p1,c1,id1,dn1);如果o1.p=o2.p,则ET(o1,o2)=Ins(p1-1,c1,id1,dn1);6.当o1.t=Ins,o2.t=Del;如果o1.p<o2.p,则ET(o1,o2)=Ins(p1,c1,id1,dn1);如果o1.p>o2.p,则ET(o1,o2)=Ins(p1’,c1,id1,dn1-1),p1’=Dic<index1,index2>;如果o1.p=o2.p,则p1’=Dic<index1,index2>;假如p1’>o2.p,则ET(o1,o2)=Ins(p1’,c1,id1,dn1-1);否则ET(o1,o2)=Ins(p1’,c1,id1,dn1);7.当o1.t=Del,o2.t=Ins;如果o1.p<o2.p,则ET(o1,o2)=Del(p1);如果o1.p>o2.p,则ET(o1,...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。