一种基于操作转换的文本编辑实时协同方法

文档序号:6621495阅读:238来源:国知局
一种基于操作转换的文本编辑实时协同方法
【专利摘要】本发明提出了一种基于操作转换的文本编辑实时协同方法,本发明首先通过产生的本地操作发送到其他站点,然后通过因果接受找出与该操作具有并发关系的操作;对其进行转换得到该操作在该站点的执行形式,并将该操作加入到执行队列,完成协同编辑;本发明能够支持在网络环境下多用户实时对同一文本进行协同编辑;本发明能够支持实时协同编辑工作,即所有的用户最终得到一致的结果的,并且结果是用户想要的;本发明应用到实时协同编辑中不需要全序控制;不仅能够做到结果一致,而且能够保证意图维护。
【专利说明】一种基于操作转换的文本编辑实时协同方法

【技术领域】
[0001]本发明涉及计算机支持的协同领域,尤其涉及一种基于操作转换的文本编辑实时协同方法。

【背景技术】
[0002]公知,协同编辑是计算机支持的协同工作中的一个重要应用领域。协同编辑作为一种分布式系统,允许地理位置上分散的用户共同编辑同一对象。为了实现实时协同编辑,每个站点都复制了一个相同的对象,以便达到最短的操作响应时间。然而在网络环境下,不同用户的操作必然会发生冲突,并发控制方法就是为了解决高并发情况下的冲突事件能够无冲突的执行,达成共同的目标。
[0003]目前实时协同编辑工作中并发控制策略的主要使用的是操作转换(Operat1nalTransformat1pn, 0T)的方法。OT是一种乐观的并发控制方法,允许冲突的发生,通过把操作转换成另一种执行形式得到一致的结果。具体来说,对本地操作立即执行,因此能够很好的满足实时性的要求;对接收到的远程操作,首先要将该操作对已执行的并发操作进行转换,然后才执行转换的结果。OT能够确保即使在不同站点执行的操作顺序不同,最终也能得到一致的结果。
[0004]OT从协同编辑系统中抽象出两个元操作(插入操作,删除操作),并且认为操作的对象是线性排列结构。最初提出的OT算法被应用于协同文本编辑,即操作的对象是文本对象(字符)。实际上,由于OT转换的是操作对象的位置,OT可以支持任何线性排列的复杂对象。本发明提出的OT算法同样可以适用于其他复杂对象的协同。
[0005]OT算法通常包含操作转换函数和控制过程。操作转换函数负责定义操作之间如何转换,控制过程主要负责定义某个该操作与哪些操作进行转换。
[0006]基于Lamport定义的“happened-before” [I]理论定义操作之间的先后关系:
[0007]定义I因果关系给定任意两个分别位于站点i和站点j上的操作OPa和0Pb,称OPa和OPb存在因果关系(记作OPa — OPb),当且仅当OPa和OPb满足下列三个条件之一:(I) i=j并且操作OPa发生在OPb之前;(2) i古j并且操作OPa在站点j的执行先于操作OPb的产生;(3)存在操作OPx,并且有OPa — OPx和OPx — OPb。
[0008]定义2并发关系给定任意两个操作OPa和0Pb,称OPa和OPb存在并发关系(记做OPa 11 OPb),当且仅当OPa和OPb既不满足OPa — OPb,又不满足OPb — OPa。
[0009]OT的一致性模型要求能够保持操作之间的因果关系,结果的一致性以及意图保持。实际情况下,大多数OT算法利用控制过程对操作施加全序达到唯一的转换路径,从而实现结果一致,但是这种方法未能考虑操作之间的位置关系,并不能保证实现意图保持。图2描述了全序OT算法不能实现意图保持的实例。
[0010]当出现Ins(p+1, c)操作,对并发的操作序列{Del(p), Ins (ρ)}进行转换的时候会出现两种结果,因此这是一种潜在的导致结果不一致和违背用户意图的因素。为了克服上述现有技术的不足,本发明提供了一种基于操作转换的文本编辑实时协同方法,能够实现结果一致和意图保持。其中,意图保持遵守Lidu[2]提出的保持操作之间的位置关系。
[0011]参考文献:
[0012][I] Lamport Leslie.Time, clocks, and the ordering of events in adistributed system.Communicat1n of ACM, 1978, 21 (7):558-565.
[0013][2]Li Du,Li Ru1.An admissibility-based operat1nal transformat1nframework for collaborative editing systems.Computer Supported CooperativeWork(CSCff), 2010, 19(1):1-43.


【发明内容】

[0014]本发明的技术方案是:一种基于操作转换的文本编辑实时协同方法,包括如下步骤:所述协同编辑系统中的每个站点都包括接受队列,等待队列,执行队列;
[0015]步骤1:每个站点产生的操作在该站点立即执行,并将该操作加入执行队列,同时将该操作发送到其他站点;
[0016]步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中;
[0017]步骤3:每个站点根据操作规则在执行队列中找出与该操作具有并发关系的操作;
[0018]步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式;
[0019]步骤5:执行换后的操作并将该操作加入到执行队列;
[0020]步骤6:完成协同编辑。
[0021]根据权利要求1所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的找出与该操作具有并发关系的操作的规则为:
[0022]包含转换用IT表示,排斥转换用ET表示;对于任何一个操作ο,ο.t表示操作的类型:插入记为Ins、删除记为Del,0.c表示操作的作用字符,ο.P表示操作的位置,0.1d表示产生该操作的站点标识,ο.dn表示与之转换的删除操作位置小于ο.ρ的操作数量;操作的包含转换或者排斥转换只会改变ο.P的值,其他属性保持不变;每个站点维护一个字典Die,用于查询ol在对o2进行包含转换IT (ol, o2)之前的位置,其中ol为插入操作,o2为删除操作,字典的关键字为〈indexl, index2>的二元组,值为ol在对o2进行包含转换之前的ρ ;indexl为操作ol在执行队列中的位置,index2为操作o2在执行队列中的位置;
[0023]当ol.t = Ins, o2.t = Ins ;如果 ο1.ρ〈ο2.ρ,则 IT(ol,o2)=Ins (pi, cl, idl, dnl);如果 ol.p = o2.p 并且 ol.dn〈o2.dn,则 IT(ol,o2)=Ins (pi, cl, idl, dnl);如果 ol.p = o2.p 并且 ol.dn = o2.dn 和 ol.1d<o2.1d,则 IT (ol, o2)=Ins (pi, cl, idl, dnl);如果 ol.p>o2.p,贝丨J IT (ol, o2) = Ins (pl+1, cl, idl, dnl);如果
ol.p = o2.p 并且 o1.dn>o2.dn,则 IT (ol, o2) = Ins (pl+1, cl, idl, dnl);如果 ol.p = o2.p并且 ol.dn = o2.dn 和 ol.1d>o2.1d,则 IT (ol, o2) = Ins (pl+1, cl, idl, dnl);
[0024]当ol.t = Ins, o2.t = Del ;如果 ol.ρ ^ ο2.ρ,贝IT (ο?, ο2)=Ins (pi, cl, idl, dnl);如果 ol.ρ>ο2.ρ,则 IT (ol, ο2) = Ins(pl-1, cl, idl, dnl+1);Dic<indexl, index2> = ol.p ;
[0025]当ol.t = Del, o2.t = Ins ;如果 ol.ρ〈ο2.p,则 IT (ol, o2) = Del (pi);如果ol.p ^ ο2.ρ,则 IT (ol, o2) = Del (pl+1);
[0026]当ol.t = Del, o2.t = Del ;如果 ol.ρ〈ο2.p,则 IT (ol, o2) = Del (pi);如果ol.p>o2.p,则 IT (ol, o2) = Del (pl-1);如果 ol.p = o2.p,则 IT (ol, o2) = Nop ;其中 Nop
表示空操作;
[0027]当ol.t = Ins, o2.t = Ins ;如果 ol.ρ ^ ο2.ρ,则 ΕΤ(ο1,ο2)=Ins (pi, cl, idl, dnl);如果 ol.ρ = ο2.ρ,则 ET (ol, ο2) = Ins (pl-1, cl, idl, dnl);
[0028]当ol.t = Ins, o2.t = Del;如果 ο1.ρ〈ο2.ρ,则 ET(ol,o2)=Ins (pi, cl, idl, dnl);如果 ol.p>o2.p,则 ET (ol, o2) = Ins (pi,, cl, idl, dnl_l),pi,=Dic<indexl, index2>,如果 ol.p = o2.p,则 pi,= Dic<indexl, index2> ;假如 pi,>o2.p,则 ET (ol, o2) = Ins (pi,,cl, idl, dn 1-1);否则 ET (ol, o2) = Ins (pi,, cl, idl, dnl);
[0029]当ol.t = Del, o2.t = Ins ;如果 ol.ρ〈ο2.p,则 ET (ol, o2) = Del (pi);如果 ol.ρ> o2.p,则 ET (ol, o2) = Del (pl+1);不存在 ol.ρ = ο2.p 的情况;
[0030]当ol.t = Del, ο2.t = Del ;如果 ol.ρ〈ο2.ρ,则 ET (ol, ο2) = Del (pi);如果
01.ρ ^ ο2.ρ,则 ET (ol, o2) = Del (pl+1)。
[0031]所述的步骤3中在执行队列中找出与该操作具有并发关系的操作包括如下步骤:
[0032]将站点历史记录划分成因操作序列,并发操作序列两部分;从左到右扫描历史记录H[k],k e {0,1,.... .L},L为H的长度,并且记录与操作ο具有因果关系的操作的位置ha,ha初始为-1 ;如果操作0与町《是并发关系,则继续判断第k+Ι个操作;如果操作0与H[k]的操作是因果关系,则对第k到n+2的操作交换H[k]和H[k-1]的位置,然后将ha加I ;
[0033]3.1 当 k_ha〈3 时,记 ο I = H[k], o2 = H[k_l];根据 ο I = H[k], ο2 = H[k_l]的操作类型,按照转换规则5-8,调用ET (ol,o2)的到ol’,然后根据o2.t和ol.t的操作类型,按照转换规则1-4,调用IT(02,ol’ )的到02’ ;分别赋值H[k] = o2’,H[k_l] = ol’,实现了交换H[k],H[k-l],交换之后执行效果相同;
[0034]3.2当k-ha≤3时,判断k_l到n+2的操作中是否存在{Ins(p, c), Del (ρ)}和{Del (ρ),Ins (p, c)的连续序列;
[0035]如果不存在,则根据opl =H[k],op2 = H[k-l]的操作类型,按照转换规则5_8,调用ET (opl, op2)的到opl’,然后根据op2.t和opl.t的操作类型,按照转换规则1-4,调用ΙΤ(ορ2,ορ)的到 ορ2’;分别赋值 H[k] =op2,,H[k_l] = opl’,实现交换 H[k]和 H[k_l]的执行顺序,交换之后执行的效果相同;将k减1,继续上面的判断;如果存在,则按照如下两种情况进行处理:
[0036]存在{Ins(ρ, c),Del (ρ)},其中 H[k] = ol,H[k_l] = Ins (p, c, dn, id)=o2,H[k_2] =Del(p) = o3 ;查询 Dic〈idnexl, idnex3> 的值得到 pi’,ol.ρ = ρ’ ;按照规则I调用IT(o3,ol)得到o3,,IT(o2,ol) =。2,;将三个操作的位置互换得到,H[k]=o3,H[k_l] = o2,H[k] = ο I ;
[0037]存在{Del(ρ),Ins (p, c)},其中 H[k] = ol,H[k_l] = Ins (p, c, dn, id)=
02,H[k-2] = Del (p) = o3 ;如果 0.p>o2.p,则 0.dn 加 I ;ο.ρ < ο2.ρ,则 ο2.ρ 加 I, ol.ρ加I ;将三个操作的位置互换得到,H[k] = o3,H[k-l] = o2,H[k] = ol。
[0038]根据权利要求4所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的步骤5包括如下步骤:
[0039]5.1 当 L-k < 2 时,记 opl = H[k], k e {ha+1,...., L};根据 op 和 opl 的操作类型,按照转换规则1-4,调用IT(op,opl)得到opl’ 加I,继续进行判断并调用IT进行转换;
[0040]5.2当L_k>2时,判断ha+Ι到L的操作中是否存在{Ins (p, c),Del (ρ)}和{Del (ρ), Ins (p, c)的连续序列;
[0041]存在{Ins(p, c), Del (ρ)},其中 opl = H[k] = Ins (p, c, dn, id), op2 = H[k+1]== Del(p);如果 op.p>opl.p,则将 op.dn 加 I,然后返回 op’= op ;如果 op.p ≤opl.p,贝丨J返回 op’ = op ;
[0042]存在{Del(ρ),Ins (p, c)},其中 opl = H[k] = Del (ρ), ορ2 = H[k+1]==Ins (ρ, c, dn, id);如果 op.t = Ins,则将 op.p 存入 Dic<indexl, index2>,其中 indexl 等于L, index2为k ;然后根据转换规则2调用IT (op, opl)得到op,,然后根据转换规则I调用IT (op,,op)得到op”;op”为操作op在该站点的执行形式;如果op.t = Del, op.ρ = opl.P,则操作op在该站点的执行形式为空操作,op.ρ不等于opl.ρ,则操作op为该站点的执行形式。
[0043]本发明的有益效果是:本发明应用到实时协同编辑中不需要全序控制;不仅能够做到结果一致,而且能够保证意图维护。

【专利附图】

【附图说明】
[0044]图1是本发明的流程图;
[0045]图2.1是本发明的合并包含转换示意图;
[0046]图2.2是本发明的依次包含转换示意图;
[0047]图3.1是本发明的合并后向转换示意图;
[0048]图3.2是本发明的依次后向转换示意图。

【具体实施方式】
[0049]对本发明的核心步骤作进一步详细的描述,但本发明的实施方式不限于此。
[0050]首先,定义若干操作转换规则。其中包含转换用IT(Inclusive Transformat1n)表示,排斥转换用ET (Exclusive Transformat1n)表示。对于任何一个操作op, op.t表示操作的类型(插入记为Ins、删除记为Del) ,op.c表示操作的作用字符,op.ρ表示操作的位置,op.1d表示产生该操作的站点标识,op.dn表示与之转换的删除操作位置小于op.ρ的数目。操作的包含转换或者排斥转换只会改变op.ρ的值,其他属性保持不变。每个站点维护一个字典Die,便于查询opl在对op2进行包含转换IT (opl, op2)之前的位置,其中opl为插入操作,op2为删除操作,字典的关键字为〈idnexl, index2>的二元组,值为opl在对op2进行包含转换之前的P。indexl为操作opl在执行队列中的位置,index2为操作op2在执行队列中的位置。
[0051]1.当 opl.t = Ins, op2.t = Ins ;如果 opl.ρ〈ορ2.ρ,则 IT(opl,op2)=Ins (pi, cl, idl, dnl);如果 opl.ρ = ορ2.ρ 并且 opl.dn〈op2.dn,则 IT (opl, op2)=Ins (pi, cl, idl, dnl);如果 opl.p = op2.p 并且 opl.dn = op2.dn 和 opl.1d<op2.id,贝丨J IT (opl, op2) = Ins (pi, cl, idl, dnl);如果 opl.ρ>ορ2.p,贝丨J IT (opl, op2)=Ins (pl+1, cl, idl, dnl);如果 opl.p = op2.p 并且 opl.dn>op2.dn,则 IT (opl, op2)=Ins (pl+1, cl, idl, dnl);如果 opl.p = op2.p 并且 opl.dn = op2.dn 和 opl.1d>op2.1d,则IT (opl, op2) = Ins (pl+1, cl, idl, dnl);
[0052]2.当 opl.t = Ins, op2.t = Del ;如果 opl.p ^ op2.p,贝[I IT (opl, op2)=Ins (pi, cl, idl, dnl);如果 opl.p>op2.p,则 IT(opl,op2) = Ins (pl-1, cl, idl, ?η^Ι);Dic<indexl, index2> = opl.p ;
[0053]3.当 opl.t = Del, op2.t = Ins ;如果 opl.ρ〈ορ2.p,则 IT (opl, op2) = Del (pi);如果 opl.p ≥ op2.p,贝丨J IT (opl, op2) = Del (p!+l);
[0054]4.当 opl.t = Del, op2.t = Del ;如果 opl.ρ〈ορ2.p,则 IT (opl, op2) = Del (pi);如果 opl.p>op2.p,贝丨J IT (opl, op2) = Del (P1-1);如果 opl.p = op2.p,贝丨J IT (opl, op2)=Nop ;其中Nop表示空操作,不产生任何效果;
[0055]5.当 opl.t = Ins, op2.t = Ins ;如果 opl.p ^ ορ2.ρ,则 ET(opl,op2)=Ins (pi, cl, idl, dnl);如果 opl.p = op2.p,则 ET (opl, op2) = Ins (pl-1, cl, idl, dnl);
[0056]6.当 opl.t = Ins, op2.t = Del ;如果 opl.ρ〈ορ2.p,则 ET(opl,op2)=Ins (ρI, cl, idl, dnl);如果 opl.p>op2.p,则 ET (opl, op2) = Ins (pi,, cl, idl, dnl_l),pi,=Dic<indexl, index2>,即 pi’ 是字典中的词;如果 opl.ρ = op2.p,则 pi’ =Dic〈indexl, index2> ;假如 pi,>ορ2.ρ,则 ET(opl,op2) = Ins (pi,,cl, idl, dnl_l);否则ET (opl, op2) = Ins (pi,, cl, idl, dnl);
[0057]7.当 opl.t = Del, op2.t = Ins ;如果 opl.ρ〈ορ2.p,则 ET (opl, op2) = Del (pi);如果 opl.ρ > op2.p,则 ET (opl, op2) = Del (pl+1);不存在 opl.p = op2.p 的情况;
[0058]8.当 opl.t = Del, op2.t = Del ;如果 opl.ρ〈ορ2.p,则 ET (opl, op2) = Del (pi);如果 opl.p ≥ ορ2.p,则 ET(opl,op2) = Del (pl+1);
[0059]1-8的转换规则都是按照操作类型自动选择的,其中1-4规则对应于ΙΤ,5_8规则对应于ET。比如opl.t = Ins, op2.t = Del,则自动按照规则2调用IT (opl, op2),按照规则 5 调用 ET (opl,op2)。
[0060]一种基于合并操作的操作转换系统框架,包括下述步骤:
[0061]步骤1:每个站点上都有3个队列:接收队列,等待队列,执行队列。每个站点产生的操作都会在该站点立即执行,并将该操作加入执行队列。每个站点需要状态向量SV(State Vector),向量的长度等于协同的站点数,SV的第i个分量等于第i个站点执行的操作数。
[0062]接收队列用于保存从其他协同站点发送到该站点的操作;所述等待队列中操作的排列顺序基于接收到的操作的时间顺序;所述执行队列保存该站点执行过的操作,其中操作的排列顺序基于执行顺序。
[0063]广播本地操作到其他协同站点。发送的操作包括如下信息:站点标识(id),操作的类型(Ins,Del),操作的位置(ρ),操作的目标(C),站点的状态向量SV。SV[i]代笔第I个站点执行的操作数目。假设当前站点为j,由于本地执行了一个操作则将sv[j]加I。
[0064]步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中.每当有远程操作被加入到执行队列,则立即检查等待队列是否有满足因果关系的操作,有则被后续步骤处理并且加入到执行队列,没有则转到接收队列进行判断。
[0065]每个站点接收到的远程操作都加入到接收队列。按照因果顺序集成远程操作。只有当一个操作的所有因操作已经被加入到执行队列,该操作才能被后续步骤处理。假如接收到的操作来自站点j,接收到的SV为S',当前的站点为i ;如果满足SVi[j]+l = SVj[j],该远程操作才会被后续步骤处理并加入到执行队列,同时将SViU]加I。否则,将该操作加入到等待队列中。
[0066]步骤3:每个站点在执行队列中找出与该操作具有并发关系的操作。记被比较的两个操作状态向量分别为SV1、SV2,k e {O, 1,2,3……η},其中η是站点的数量,遍历SV1和SV20如果SV1Di] <SV2[k]的次数少于n,则判断两个操作是并发操作,等于η则判断SV1K代表的操作是因操作,SV2所代表的操作是果操作。
[0067]将站点历史记录划分成因操作序列,并发操作序列两部分,记录它们的分界位置为ha。从左到右扫描历史记录H[k],k e {O, I,……L},L为H的长度,ha初始为-1。如果操作op与H[k]是并发关系,则继续判断第k+Ι个操作;如果操作op与H[k]的操作是因果关系,则对第k到ha+2的操作交换H[k]和H[k-1]的位置,然后将ha加I。
[0068]①当k_ha〈3 时,记 opl = H[k],op2 = H[k_l]。根据 opl = H[k],op2 = H[k_l]的操作类型,按照转换规则5-8,调用ET(opl,op2)的到opl’,然后根据op2.t和opl.t的操作类型,按照转换规则1-4,调用IT (op2,opl’)的到op2’。分别赋值H[k] =op2,,H[k_l]=opl’,实现了交换H[k], H[k-1]的目的,并且交换之后执行的效果一样。
[0069]②当k-ha≥3时,判断k-Ι到记录与操作op具有因果关系的操作的位置ha+2的操作中是否存在Uns (ρ, c), Del (ρ)}和{Del (p),Ins (p, c)的连续序列,即在同一个位置进行插入删除(或者删除插入)的连续操作。
[0070]③如果不存在,则根据opl = H[k],op2 = H[k_l]的操作类型,按照转换规则5_8,调用ET (opl, op2)得到opl’,然后根据op2.t和opl.t的操作类型,按照转换规则1-4,调用 IT(op2,opl’ )得到 ορ2,。
[0071]分别赋值H[k] =op2’,H[k_l] = opl’,实现了交换H[k],H[k_l]的目的,并且交换之后执行的效果一样。将k减1,继续利用上面的过程交换H[k]和H[k-1]位置的操作。如果存在,但是opl.t = Del,则同样按照上面的过程处理。
[0072]④存在{Ins(ρ, c),Del (ρ)},其中 H[k] =opl,H[k_l] = Ins (p, c, dn, id)=ορ2, H[k-2] = Del (ρ) = op3 ;查询 Dic<idnexl, idnex3> 的值得到 pi,, opl.ρ = ρ,;按照规则I调用IT(op3,opl)得到ορ3,,IT(op2,opl) = ορ2,;将三个操作的位置互换得到,H[k] = op3,H[k_l] = op2, H[k] = opl。
[0073]⑤存在{Del(ρ),Ins (p, c)},其中 H[k] =opl,H[k_l] = Ins (p, c, dn, id)=op2, H[k-2] = Del (p) = op3 ;如果 op.p>op2.p,贝丨J op.dn 加 I ;op.p ( op2.p,贝丨J op2.p 加
I,opl.p加I ;将三个操作的位置互换得到,H[k] = op3,H[k-l] = op2, H[k] = opl。
[0074]步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式。经过上一个步骤之后,可以得知H[l,...,ha]为因操作,H[ha+l,——,L]为并发操作。将操作op对并发操作进行包含转换得到op’,op’即为操作op在该站点的执行形式。
[0075]①当L-ha < 2 时,记 opl = H[k], k e {ha+1,....,L}。根据 op 和 opl 的操作类型,按照转换规则1-4,调用IT(op,opl)得到op’。将k加1,重复上述过程。
[0076]②当L_ha>2时,判断ha+Ι到L的操作中是否存在{Ins (p, c), Del (ρ)}和{Del (p), Ins (p, c)的连续序列,即在同一个位置进行插入删除(或者删除插入)的连续操作。
[0077]③存在{Ins(p, c), Del (ρ)},其中 opl = H[k] = Ins (p, c, dn, id), op2 = H[k+1]==Del (p);如果 op.p>opl.p,则将 op.dn 加 I,然后返回 op,= op ;如果 op.p ≤ opl.ρ,则返回op,= op ;
[0078]④存在{Del(ρ), Ins (p, c)},其中 opl = H[k] = Del (ρ), op2 = H[k+1]==Ins (p, c, dn, id);如果 op.t = Ins,则将 op.p 存入 Dic<indexl, index2>,其中 indexl 等于L, index2为k。然后根据转换规则2调用IT(op,opl)得到op’,然后根据转换规则I调用IT (op,,op)得到op”。op”即为操作op在该站点的执行形式。如果op.t = Del, op.ρ =opl.P,则操作op在该站点的执行形式为空操作,没有实际效果,也不会加入到执行队列。op.P不等于opl.P,则操作OP就是在该站点的执行形式。
[0079]步骤5:执行转换后的操作并将该操作加入到执行队列;
[0080]步骤6:完成协同编辑。
[0081]下面利用一个实例来对本发明作进一步说明:
[0082]如表1所示,4个站点的协同文本编辑系统,初始化文档状态为” abCd”,每个站点的本地操作如表1所示,站点操作的编号从O开始。在图2中描述站点2执行本地操作以及接收远程操作的顺序。表2给出了每个站点接收到的远程操作的顺序,可以看出每个站点接收的操作顺序不一样。从表3可以看出,采用上面提出的OT算法来支持这种协同,尽管执行的操作顺序不同,但是最终每个站点都得到了一致的结果并且实现了实时协同文本编辑。因为在定义包含转换的时候,规定了如果在同一个位置插入字符,那么站点小的插入的位置在后面;所以,字符U、V的位置会在字符1、m之前,其他同理。显然,最终的结果符合用户操作的实时协同。
[0083]综上所述,一种基于操作转换的文本编辑实时协同方法,能够实现多个站点协同的结果一致性与意图维护。
[0084]表1站点的本地操作
[0085]

【权利要求】
1.一种基于操作转换的文本编辑实时协同方法,其特征在于:包括如下步骤:所述协同编辑系统中的每个站点都包括接受队列,等待队列,执行队列; 步骤1:每个站点产生的操作在该站点立即执行,并将该操作加入执行队列,同时将该操作发送到其他站点; 步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中; 步骤3:每个站点根据操作 规则在执行队列中找出与该操作具有并发关系的操作; 步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式; 步骤5:执行转换后的操作并将该操作加入到执行队列; 步骤6:完成协同编辑。
2.根据权利要求1所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的找出与该操作具有并发关系的操作的规则为: 包含转换用IT表示,排斥转换用ET表示;对于任何一个操作O, 0.t表示操作的类型:插入记为Ins、删除记为Del, ο.c表不操作的作用字符,ο.ρ表不操作的位置,0.1d表不产生该操作的站点标识,ο.dn表示与之转换的删除操作位置小于P的数目;操作的包含转换或者排斥转换只会改变ο.P的值,其他属性保持不变;每个站点维护一个字典Die,用于查询ol在对o2进行包含转换IT (ol, o2)之前的位置,其中ol为插入操作,o2为删除操作,字典的关键字为〈idnexl, idnex2>的二元组,值为ol在对o2进行包含转换之前的p ;idnexl为操作ol在执行队列中的位置,idnex2为操作o2在执行队列中的位置;
当 ol.t=Ins, o2.t=Ins;如果 ol.ρ〈ο2.p,则 IT (οI, ο2) =Ins (pi, cl, idl, dnl);如果 ol.ρ=ο2.ρ 并且 ol.dn<o2.dn,则 IT (ol, o2) =Ins (pi, cl, idl, dnl);如果 ol.p=o2.p并且 ol.dn=o2.dn 和 ol.1d<o2.1d,则 IT (ol, o2) =Ins (pi, cl, idl, dnl);如果 ol.p>o2.p,则 IT (ol, o2) =Ins (pl+1, cl, idl, dnl);如果 ol.p=o2.p 并且 ol.dn>o2.dn,则IT (ol, o2) =Ins (pl+1, cl, idl, dnl);如果 ol.p=o2.p 并且 ol.dn=o2.dn 和 ol.1d>o2.1d,则IT (ol, o2) =Ins (pl+1, cl, idl, dnl);
当 ol.t=Ins, o2.t=Del;如果 ol.p ^ o2.p,则 IT (ol, o2) =Ins (pi, cl, idl, dnl);如果ol.p>o2.p,则 IT (ol, o2) =Ins (pl-1, cl, idl, dnl+1) ; Dic<indexl, index2>=ol.p;
当 ol.t=Del, o2.t=Ins;如果 ol.ρ〈ο2.p,则 IT (ol, o2) =Del (pi);如果 ol.p ^ o2.ρ,则 IT(ol,o2)=Del(Pl+l);
当 ol.t=Del, ο2.t=Del;如果 ol.ρ〈ο2.ρ,贝丨J IT (ol, ο2) =Del (pi);如果 ol.ρ>ο2.ρ,贝丨JIT (ol, o2) =Del (P1-1);如果 ol.ρ=ο2.p,贝丨J IT (ol, o2) =Nop;其中 Nop 表示空操作;
当 ol.t=Ins, ο2.t=Ins;如果 ol.ρ ^ ο2.ρ,则 ET (ol, ο2) =Ins (pi, cl, idl, dnl);如果ol.ρ=ο2.ρ,则 ET (ol, ο2) =Ins (pl-1, cl, idl, dnl);
当 ol.t=Ins, ο2.t=Del; 如果 ol.ρ<ο2.ρ,则 ET (οI, o2) =Ins (pi, cl, idl, dnl);如果 ο 1.ρ>ο2.ρ,则 ET(ol,o2)=Ins(pl,,cl,idl,dnl-l),pl,=Dic〈indexl,index2> ;如果 ol.ρ=ο2.ρ,贝丨J pi ’ =Dic〈indexl, index2> ; 假如 pl,>o2.p,贝丨JET (ol, o2) =Ins (pi,, cl, idl, dnl-1);否则 ET (ol, o2) =Ins (pi,, cl, idl, dnl);
当 ol.t=Del, o2.t=Ins;如果 ol.ρ〈ο2.p,则 ET (ol, o2) =Del (pi);如果 ol.ρ > ο2.ρ,贝丨J ET (ol, ο2) =Del (pl+1);不存在 ol.ρ=ο2.ρ 的情况;当 ol.t=Del, ο2.t=Del;如果 ol.ρ〈ο2.ρ,则 ET (ol, ο2) =Del (pi);如果 ol.ρ ^ ο2.ρ,则 ET (ol,o2)=Del(pl+l)。
3.根据权利要求2所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的步骤3中在执行队列中找出与该操作具有并发关系的操作包括如下步骤: 将站点历史记录划分成因操作序列caList,并发操作序列coList两部分;从左到右扫描历史记录H[k],k e {0,1,.....L},L为H的长度,并且记录与操作ο具有因果关系的操作的位置η,η初始为-1 ;如果操作0与町《是并发关系,则继续判断第k+Ι个操作;如果操作ο与H[k]的操作是因果关系,则对第k到n+2的操作交换H[k]和H[k-1]的位置,然后将η加I ; . 3.1当 k-n〈3 时,记 ol=H[k], o2=H[k-l];根据 ol=H[k],o2=H[k_l]的操作类型,按照转换规则5-8,调用ET (ol,o2)的到ol’,然后根据o2.t和ol.t的操作类型,按照转换规则.1-4,调用 ΙΤ(ο2,οL)的到 ο2’;分别赋值町《=02’,!1[1^1]=01’,实现了交换!1[10,!1[1^1],交换之后执行效果相同; .3.2当k-n≤3时,判断k-Ι到n+2的操作中是否存在{Ins (p, c),Del (ρ)}和{Del (ρ),Ins (p, c)的连续序列; 如果不存在,则根据opl=H[k],op2=H[k-l]的操作类型,按照转换规则5-8,调用ET(opl, op2)的到opr,然后根据op2.t和opl.t的操作类型,按照转换规则1-4,调用ΙΤ(ορ2,ορL )的到 ορ2’;分别赋值 H[k]=op2’,H[k_l] =opl’,实现交换 H[k]和 H[k_l]的执行顺序,交换之后执行的效果相同;将k减1,继续上面的判断;如果存在,则按照如下两种情况进行处理:
存在{Ins (ρ, c), Del (ρ)},其中 H[k] =ol, H[k_l] =Ins (p, c, dn, id) =o2, H[k_2]=Del (p)=o3;查询 Dic〈idnexl, idnex3> 的值得到 ρL,ol.p=p’ ;按照规则 I 调用 IT (o3, ol)得到.03,,IT(o2,ol)=o2,;将三个操作的位置互换得到,H[k]=03,H[k-l]=02,H[k]=0l ;
存在{Del (ρ), Ins (p, c)},其中 H[k] =ol, H[k_l] =Ins (p, c, dn, id) =o2, H[k_2]=Del (p)=o3;如果0.p>o2.p,贝丨J 0.dn加I ;0.p ^ ο2.p,贝丨J ο2.ρ加I, ol.ρ加I ;将三个操作的位置互换得到,H[k] =o3,H[k-l]=o2, H[k] =oI。
4.根据权利要求3所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的步骤5包括如下步骤: . 5.1当L-k≤2时,记opI=H[k],k e {n+1,——,L};根据op和opl的操作类型,按照转换规则1-4,调用IT(op,opl)得到opl’ 加1,继续进行判断并调用IT进行转换; . 5.2当L-k>2时,判断n+1到L的操作中是否存在{Ins (p,c),Del (ρ)}和{Del (ρ),Ins (p, c)的连续序列;
存在{Ins (p, c),Del (ρ)},其中 opl=H[k] =Ins (p, c, dn, id),op2=H[k+l] ==Del (ρ);如果 op.p>opl.p,则将 op.dn 加 I,然后返回 op,=op;如果 op.ρ ( opl.p,则返回 op,=op ;
存在{Del (ρ),Ins (p, c)},其中 opl=H[k] =Del (p),op2=H[k+l] ==Ins (p, c, dn, id);如果 op.t=Ins,则将 op.p 存入 Dic<indexl, index2>,其中 indexl 等于 L, index2 为 k ;然后根据转换规则2调用IT (op, opl)得到op,,然后根据转换规则I调用IT (op,,op)得到op”;op”为操作op在该站点的执行形式;如果op.t=Del, op.p=opl.p,则操作op在该站点的执行形式为空操作,op.ρ不等于opl.p,则操作op为该站点的执行形式。
【文档编号】G06F17/30GK104077425SQ201410362735
【公开日】2014年10月1日 申请日期:2014年7月28日 优先权日:2014年7月28日
【发明者】何发智, 蔡维纬, 吕晓 申请人:武汉大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1