CN104077425A - 一种基于操作转换的文本编辑实时协同方法 - Google Patents
一种基于操作转换的文本编辑实时协同方法 Download PDFInfo
- Publication number
- CN104077425A CN104077425A CN201410362735.9A CN201410362735A CN104077425A CN 104077425 A CN104077425 A CN 104077425A CN 201410362735 A CN201410362735 A CN 201410362735A CN 104077425 A CN104077425 A CN 104077425A
- Authority
- CN
- China
- Prior art keywords
- ins
- del
- website
- conversion
- call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提出了一种基于操作转换的文本编辑实时协同方法,本发明首先通过产生的本地操作发送到其他站点,然后通过因果接受找出与该操作具有并发关系的操作;对其进行转换得到该操作在该站点的执行形式,并将该操作加入到执行队列,完成协同编辑;本发明能够支持在网络环境下多用户实时对同一文本进行协同编辑;本发明能够支持实时协同编辑工作,即所有的用户最终得到一致的结果的,并且结果是用户想要的;本发明应用到实时协同编辑中不需要全序控制;不仅能够做到结果一致,而且能够保证意图维护。
Description
技术领域
本发明涉及计算机支持的协同领域,尤其涉及一种基于操作转换的文本编辑实时协同方法。
背景技术
公知,协同编辑是计算机支持的协同工作中的一个重要应用领域。协同编辑作为一种分布式系统,允许地理位置上分散的用户共同编辑同一对象。为了实现实时协同编辑,每个站点都复制了一个相同的对象,以便达到最短的操作响应时间。然而在网络环境下,不同用户的操作必然会发生冲突,并发控制方法就是为了解决高并发情况下的冲突事件能够无冲突的执行,达成共同的目标。
目前实时协同编辑工作中并发控制策略的主要使用的是操作转换(OperationalTransformatiopn,OT)的方法。OT是一种乐观的并发控制方法,允许冲突的发生,通过把操作转换成另一种执行形式得到一致的结果。具体来说,对本地操作立即执行,因此能够很好的满足实时性的要求;对接收到的远程操作,首先要将该操作对已执行的并发操作进行转换,然后才执行转换的结果。OT能够确保即使在不同站点执行的操作顺序不同,最终也能得到一致的结果。
OT从协同编辑系统中抽象出两个元操作(插入操作,删除操作),并且认为操作的对象是线性排列结构。最初提出的OT算法被应用于协同文本编辑,即操作的对象是文本对象(字符)。实际上,由于OT转换的是操作对象的位置,OT可以支持任何线性排列的复杂对象。本发明提出的OT算法同样可以适用于其他复杂对象的协同。
OT算法通常包含操作转换函数和控制过程。操作转换函数负责定义操作之间如何转换,控制过程主要负责定义某个该操作与哪些操作进行转换。
基于Lamport定义的“happened-before”[1]理论定义操作之间的先后关系:
定义1因果关系给定任意两个分别位于站点i和站点j上的操作OPa和OPb,称OPa和OPb存在因果关系(记作OPa→OPb),当且仅当OPa和OPb满足下列三个条件之一:(1)i=j并且操作OPa发生在OPb之前;(2)i≠j并且操作OPa在站点j的执行先于操作OPb的产生;(3)存在操作OPx,并且有OPa→OPx和OPx→OPb。
定义2并发关系给定任意两个操作OPa和OPb,称OPa和OPb存在并发关系(记做OPa||OPb),当且仅当OPa和OPb既不满足OPa→OPb,又不满足OPb→OPa。
OT的一致性模型要求能够保持操作之间的因果关系,结果的一致性以及意图保持。实际情况下,大多数OT算法利用控制过程对操作施加全序达到唯一的转换路径,从而实现结果一致,但是这种方法未能考虑操作之间的位置关系,并不能保证实现意图保持。图2描述了全序OT算法不能实现意图保持的实例。
当出现Ins(p+1,c)操作,对并发的操作序列{Del(p),Ins(p)}进行转换的时候会出现两种结果,因此这是一种潜在的导致结果不一致和违背用户意图的因素。为了克服上述现有技术的不足,本发明提供了一种基于操作转换的文本编辑实时协同方法,能够实现结果一致和意图保持。其中,意图保持遵守Lidu[2]提出的保持操作之间的位置关系。
参考文献:
[1]Lamport Leslie.Time,clocks,and the ordering of events in a distributed system.Communicationof ACM,1978,21(7):558-565.
[2]Li Du,Li Rui.An admissibility-based operational transformation framework for collaborativeediting systems.Computer Supported Cooperative Work(CSCW),2010,19(1):1-43.
发明内容
本发明的技术方案是:一种基于操作转换的文本编辑实时协同方法,包括如下步骤:所述协同编辑系统中的每个站点都包括接受队列,等待队列,执行队列;
步骤1:每个站点产生的操作在该站点立即执行,并将该操作加入执行队列,同时将该操作发送到其他站点;
步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中;
步骤3:每个站点根据操作规则在执行队列中找出与该操作具有并发关系的操作;
步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式;
步骤5:执行转换后的操作并将该操作加入到执行队列;
步骤6:完成协同编辑。
根据权利要求1所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的找出与该操作具有并发关系的操作的规则为:
包含转换用IT表示,排斥转换用ET表示;对于任何一个操作o,o.t表示操作的类型:插入记为Ins、删除记为Del,o.c表示操作的作用字符,o.p表示操作的位置,o.id表示产生该操作的站点标识,o.dn表示与之转换的删除操作位置小于o.p的操作数量;操作的包含转换或者排斥转换只会改变o.p的值,其他属性保持不变;每个站点维护一个字典Dic,用于查询o1在对o2进行包含转换IT(o1,o2)之前的位置,其中o1为插入操作,o2为删除操作,字典的关键字为<index1,index2>的二元组,值为o1在对o2进行包含转换之前的p;index1为操作o1在执行队列中的位置,index2为操作o2在执行队列中的位置;
当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);
当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;
当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);
当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表示空操作;
当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);
当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);
当o1.t=Del,o2.t=Ins;如果o1.p<o2.p,则ET(o1,o2)=Del(p1);如果o1.p>o2.p,则ET(o1,o2)=Del(p1+1);不存在o1.p=o2.p的情况;
当o1.t=Del,o2.t=Del;如果o1.p<o2.p,则ET(o1,o2)=Del(p1);如果o1.p≥o2.p,则ET(o1,o2)=Del(p1+1)。
所述的步骤3中在执行队列中找出与该操作具有并发关系的操作包括如下步骤:
将站点历史记录划分成因操作序列,并发操作序列两部分;从左到右扫描历史记录H[k],k∈{0,1,.....L},L为H的长度,并且记录与操作o具有因果关系的操作的位置ha,ha初始为-1;如果操作o与H[k]是并发关系,则继续判断第k+1个操作;如果操作o与H[k]的操作是因果关系,则对第k到n+2的操作交换H[k]和H[k-1]的位置,然后将ha加1;
3.1当k-ha<3时,记o1=H[k],o2=H[k-1];根据o1=H[k],o2=H[k-1]的操作类型,按照转换规则5-8,调用ET(o1,o2)的到o1’,然后根据o2.t和o1.t的操作类型,按照转换规则1-4,调用IT(o2,o1’)的到o2’;分别赋值H[k]=o2’,H[k-1]=o1’,实现了交换H[k],H[k-1],交换之后执行效果相同;
3.2当k-ha≥3时,判断k-1到n+2的操作中是否存在{Ins(p,c),Del(p)}和{Del(p),Ins(p,c)的连续序列;
如果不存在,则根据op1=H[k],op2=H[k-1]的操作类型,按照转换规则5-8,调用ET(op1,op2)的到op1’,然后根据op2.t和op1.t的操作类型,按照转换规则1-4,调用IT(op2,op1’)的到op2’;分别赋值H[k]=op2’,H[k-1]=op1’,实现交换H[k]和H[k-1]的执行顺序,交换之后执行的效果相同;将k减1,继续上面的判断;如果存在,则按照如下两种情况进行处理:
存在{Ins(p,c),Del(p)},其中H[k]=o1,H[k-1]=Ins(p,c,dn,id)=o2,H[k-2]=Del(p)=o3;查询Dic<idnex1,idnex3>的值得到p1’,o1.p=p’;按照规则1调用IT(o3,o1)得到o3’,IT(o2,o1)=o2’;将三个操作的位置互换得到,H[k]=o3,H[k-1]=o2,H[k]=o1;
存在{Del(p),Ins(p,c)},其中H[k]=o1,H[k-1]=Ins(p,c,dn,id)=o2,H[k-2]=Del(p)=o3;如果o.p>o2.p,则o.dn加1;o.p≤o2.p,则o2.p加1,o1.p加1;将三个操作的位置互换得到,H[k]=o3,H[k-1]=o2,H[k]=o1。
根据权利要求4所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的步骤5包括如下步骤:
5.1当L-k≤2时,记op1=H[k],k∈{ha+1,....,L};根据op和op1的操作类型,按照转换规则1-4,调用IT(op,op1)得到op1’;将k加1,继续进行判断并调用IT进行转换;
5.2当L-k>2时,判断ha+1到L的操作中是否存在{Ins(p,c),Del(p)}和{Del(p),Ins(p,c)的连续序列;
存在{Ins(p,c),Del(p)},其中op1=H[k]=Ins(p,c,dn,id),op2=H[k+1]==Del(p);如果op.p>op1.p,则将op.dn加1,然后返回op’=op;如果op.p≤op1.p,则返回op’=op;
存在{Del(p),Ins(p,c)},其中op1=H[k]=Del(p),op2=H[k+1]==Ins(p,c,dn,id);如果op.t=Ins,则将op.p存入Dic<index1,index2>,其中index1等于L,index2为k;然后根据转换规则2调用IT(op,op1)得到op’,然后根据转换规则1调用IT(op’,op)得到op”;op”为操作op在该站点的执行形式;如果op.t=Del,op.p=op1.p,则操作op在该站点的执行形式为空操作,op.p不等于op1.p,则操作op为该站点的执行形式。
本发明的有益效果是:本发明应用到实时协同编辑中不需要全序控制;不仅能够做到结果一致,而且能够保证意图维护。
附图说明
图1是本发明的流程图;
图2.1是本发明的合并包含转换示意图;
图2.2是本发明的依次包含转换示意图;
图3.1是本发明的合并后向转换示意图;
图3.2是本发明的依次后向转换示意图。
具体实施方式
对本发明的核心步骤作进一步详细的描述,但本发明的实施方式不限于此。
首先,定义若干操作转换规则。其中包含转换用IT(Inclusive Transformation)表示,排斥转换用ET(Exclusive Transformation)表示。对于任何一个操作op,op.t表示操作的类型(插入记为Ins、删除记为Del),op.c表示操作的作用字符,op.p表示操作的位置,op.id表示产生该操作的站点标识,op.dn表示与之转换的删除操作位置小于op.p的数目。操作的包含转换或者排斥转换只会改变op.p的值,其他属性保持不变。每个站点维护一个字典Dic,便于查询op1在对op2进行包含转换IT(op1,op2)之前的位置,其中op1为插入操作,op2为删除操作,字典的关键字为<idnex1,index2>的二元组,值为op1在对op2进行包含转换之前的p。index1为操作op1在执行队列中的位置,index2为操作op2在执行队列中的位置。
1.当op1.t=Ins,op2.t=Ins;如果op1.p<op2.p,则IT(op1,op2)=Ins(p1,c1,id1,dn1);如果op1.p=op2.p并且op1.dn<op2.dn,则IT(op1,op2)=Ins(p1,c1,id1,dn1);如果op1.p=op2.p并且op1.dn=op2.dn和op1.id<op2.id,则IT(op1,op2)=Ins(p1,c1,id1,dn1);如果op1.p>op2.p,则IT(op1,op2)=Ins(p1+1,c1,id1,dn1);如果op1.p=op2.p并且op1.dn>op2.dn,则IT(op1,op2)=Ins(p1+1,c1,id1,dn1);如果op1.p=op2.p并且op1.dn=op2.dn和op1.id>op2.id,则IT(op1,op2)=Ins(p1+1,c1,id1,dn1);
2.当op1.t=Ins,op2.t=Del;如果op1.p≤op2.p,则IT(op1,op2)=Ins(p1,c1,id1,dn1);如果op1.p>op2.p,则IT(op1,op2)=Ins(p1-1,c1,id1,dn1+1);Dic<index1,index2>=op1.p;
3.当op1.t=Del,op2.t=Ins;如果op1.p<op2.p,则IT(op1,op2)=Del(p1);如果op1.p≥op2.p,则IT(op1,op2)=Del(p1+1);
4.当op1.t=Del,op2.t=Del;如果op1.p<op2.p,则IT(op1,op2)=Del(p1);如果op1.p>op2.p,则IT(op1,op2)=Del(p1-1);如果op1.p=op2.p,则IT(op1,op2)=Nop;其中Nop表示空操作,不产生任何效果;
5.当op1.t=Ins,op2.t=Ins;如果op1.p≤op2.p,则ET(op1,op2)=Ins(p1,c1,id1,dn1);如果op1.p=op2.p,则ET(op1,op2)=Ins(p1-1,c1,id1,dn1);
6.当op1.t=Ins,op2.t=Del;如果op1.p<op2.p,则ET(op1,op2)=Ins(p1,c1,id1,dn1);如果op1.p>op2.p,则ET(op1,op2)=Ins(p1’,c1,id1,dn1-1),p1’=Dic<index1,index2>,即p1’是字典中的词;如果op1.p=op2.p,则p1’=Dic<index1,index2>;假如p1’>op2.p,则ET(op1,op2)=Ins(p1’,c1,id1,dn1-1);否则ET(op1,op2)=Ins(p1’,c1,id1,dn1);
7.当op1.t=Del,op2.t=Ins;如果op1.p<op2.p,则ET(op1,op2)=Del(p1);如果op1.p>op2.p,则ET(op1,op2)=Del(p1+1);不存在op1.p=op2.p的情况;
8.当op1.t=Del,op2.t=Del;如果op1.p<op2.p,则ET(op1,op2)=Del(p1);如果op1.p≥op2.p,则ET(op1,op2)=Del(p1+1);
1-8的转换规则都是按照操作类型自动选择的,其中1-4规则对应于IT,5-8规则对应于ET。比如op1.t=Ins,op2.t=Del,则自动按照规则2调用IT(op1,op2),按照规则5调用ET(op1,op2)。
一种基于合并操作的操作转换系统框架,包括下述步骤:
步骤1:每个站点上都有3个队列:接收队列,等待队列,执行队列。每个站点产生的操作都会在该站点立即执行,并将该操作加入执行队列。每个站点需要状态向量SV(StateVector),向量的长度等于协同的站点数,SV的第i个分量等于第i个站点执行的操作数。
接收队列用于保存从其他协同站点发送到该站点的操作;所述等待队列中操作的排列顺序基于接收到的操作的时间顺序;所述执行队列保存该站点执行过的操作,其中操作的排列顺序基于执行顺序。
广播本地操作到其他协同站点。发送的操作包括如下信息:站点标识(id),操作的类型(Ins,Del),操作的位置(p),操作的目标(c),站点的状态向量SV。SV[i]代笔第i个站点执行的操作数目。假设当前站点为j,由于本地执行了一个操作则将SV[j]加1。
步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中.每当有远程操作被加入到执行队列,则立即检查等待队列是否有满足因果关系的操作,有则被后续步骤处理并且加入到执行队列,没有则转到接收队列进行判断。
每个站点接收到的远程操作都加入到接收队列。按照因果顺序集成远程操作。只有当一个操作的所有因操作已经被加入到执行队列,该操作才能被后续步骤处理。假如接收到的操作来自站点j,接收到的SV为SVj,当前的站点为i;如果满足SVi[j]+1=SVj[j],该远程操作才会被后续步骤处理并加入到执行队列,同时将SVi[j]加1。否则,将该操作加入到等待队列中。
步骤3:每个站点在执行队列中找出与该操作具有并发关系的操作。记被比较的两个操作状态向量分别为SV1、SV2,k∈{0,1,2,3.....n},其中n是站点的数量,遍历SV1和SV2。如果SV1[k]<SV2[k]的次数少于n,则判断两个操作是并发操作,等于n则判断SV1所代表的操作是因操作,SV2所代表的操作是果操作。
将站点历史记录划分成因操作序列,并发操作序列两部分,记录它们的分界位置为ha。从左到右扫描历史记录H[k],k∈{0,1,.....L},L为H的长度,ha初始为-1。如果操作op与H[k]是并发关系,则继续判断第k+1个操作;如果操作op与H[k]的操作是因果关系,则对第k到ha+2的操作交换H[k]和H[k-1]的位置,然后将ha加1。
①当k-ha<3时,记op1=H[k],op2=H[k-1]。根据op1=H[k],op2=H[k-1]的操作类型,按照转换规则5-8,调用ET(op1,op2)的到op1’,然后根据op2.t和op1.t的操作类型,按照转换规则1-4,调用IT(op2,op1’)的到op2’。分别赋值H[k]=op2’,H[k-1]=op1’,实现了交换H[k],H[k-1]的目的,并且交换之后执行的效果一样。
②当k-ha≥3时,判断k-1到记录与操作op具有因果关系的操作的位置ha+2的操作中是否存在{Ins(p,c),Del(p)}和{Del(p),Ins(p,c)的连续序列,即在同一个位置进行插入删除(或者删除插入)的连续操作。
③如果不存在,则根据op1=H[k],op2=H[k-1]的操作类型,按照转换规则5-8,调用ET(op1,op2)得到op1’,然后根据op2.t和op1.t的操作类型,按照转换规则1-4,调用IT(op2,op1’)得到op2’。
分别赋值H[k]=op2’,H[k-1]=op1’,实现了交换H[k],H[k-1]的目的,并且交换之后执行的效果一样。将k减1,继续利用上面的过程交换H[k]和H[k-1]位置的操作。如果存在,但是op1.t=Del,则同样按照上面的过程处理。
④存在{Ins(p,c),Del(p)},其中H[k]=op1,H[k-1]=Ins(p,c,dn,id)=op2,H[k-2]=Del(p)=op3;查询Dic<idnex1,idnex3>的值得到p1’,op1.p=p’;按照规则1调用IT(op3,op1)得到op3’,IT(op2,op1)=op2’;将三个操作的位置互换得到,H[k]=op3,H[k-1]=op2,H[k]=op1。
⑤存在{Del(p),Ins(p,c)},其中H[k]=op1,H[k-1]=Ins(p,c,dn,id)=op2,H[k-2]=Del(p)=op3;如果op.p>op2.p,则op.dn加1;op.p≤op2.p,则op2.p加1,op1.p加1;将三个操作的位置互换得到,H[k]=op3,H[k-1]=op2,H[k]=op1。
步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式。经过上一个步骤之后,可以得知H[1,...,ha]为因操作,H[ha+1,....,L]为并发操作。将操作op对并发操作进行包含转换得到op’,op’即为操作op在该站点的执行形式。
①当L-ha≤2时,记op1=H[k],k∈{ha+1,....,L}。根据op和op1的操作类型,按照转换规则1-4,调用IT(op,op1)得到op’。将k加1,重复上述过程。
②当L-ha>2时,判断ha+1到L的操作中是否存在{Ins(p,c),Del(p)}和{Del(p),Ins(p,c)的连续序列,即在同一个位置进行插入删除(或者删除插入)的连续操作。
③存在{Ins(p,c),Del(p)},其中op1=H[k]=Ins(p,c,dn,id),op2=H[k+1]==Del(p);如果op.p>op1.p,则将op.dn加1,然后返回op’=op;如果op.p≤op1.p,则返回op’=op;
④存在{Del(p),Ins(p,c)},其中op1=H[k]=Del(p),op2=H[k+1]==Ins(p,c,dn,id);如果op.t=Ins,则将op.p存入Dic<index1,index2>,其中index1等于L,index2为k。然后根据转换规则2调用IT(op,op1)得到op’,然后根据转换规则1调用IT(op’,op)得到op”。op”即为操作op在该站点的执行形式。如果op.t=Del,op.p=op1.p,则操作op在该站点的执行形式为空操作,没有实际效果,也不会加入到执行队列。op.p不等于op1.p,则操作op就是在该站点的执行形式。
步骤5:执行转换后的操作并将该操作加入到执行队列;
步骤6:完成协同编辑。
下面利用一个实例来对本发明作进一步说明:
如表1所示,4个站点的协同文本编辑系统,初始化文档状态为”abCd”,每个站点的本地操作如表1所示,站点操作的编号从0开始。在图2中描述站点2执行本地操作以及接收远程操作的顺序。表2给出了每个站点接收到的远程操作的顺序,可以看出每个站点接收的操作顺序不一样。从表3可以看出,采用上面提出的OT算法来支持这种协同,尽管执行的操作顺序不同,但是最终每个站点都得到了一致的结果并且实现了实时协同文本编辑。因为在定义包含转换的时候,规定了如果在同一个位置插入字符,那么站点小的插入的位置在后面;所以,字符u、v的位置会在字符l、m之前,其他同理。显然,最终的结果符合用户操作的实时协同。
综上所述,一种基于操作转换的文本编辑实时协同方法,能够实现多个站点协同的结果一致性与意图维护。
表1站点的本地操作
表2各站点接收远程操作顺序
Site1 | Site2 | Site3 | Site4 |
Site3-op0 | Site1-op0 | Site1-op0 | Site1-op0 |
Site3-op1 | Site1-op1 | Site2-op0 | Site2-op0 |
Site2-op0 | Site1-op2 | Site1-op1 | Site1-op1 |
Site2-op1 | Site3-op0 | Site2-op1 | Site2-op1 |
Site2-op2 | Site3-op1 | Site2-op2 | Site2-op2 |
Site4-op0 | Site4-op0 | Site4-op0 | Site1-op2 |
Site3-op2 | Site3-op2 | Site1-op2 | Site3-op0 |
Site4-op1 | Site4-op1 | Site4-op1 | Site3-op1 |
Site4-op2 | Site4-op2 | Site4-op2 | Site3-op2 |
表3每个站点执行的操作以及最终文档状态
Claims (4)
1.一种基于操作转换的文本编辑实时协同方法,其特征在于:包括如下步骤:所述协同编辑系统中的每个站点都包括接受队列,等待队列,执行队列;
步骤1:每个站点产生的操作在该站点立即执行,并将该操作加入执行队列,同时将该操作发送到其他站点;
步骤2:每个站点接收到的远程操作加入到接收队列,当该远程操作的所有因操作已经被加入到执行队列,进入步骤3,否则,将该操作加入到等待队列中;
步骤3:每个站点根据操作规则在执行队列中找出与该操作具有并发关系的操作;
步骤4:将找出的并发操作进行转换得到该操作在该站点的执行形式;
步骤5:执行转换后的操作并将该操作加入到执行队列;
步骤6:完成协同编辑。
2.根据权利要求1所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的找出与该操作具有并发关系的操作的规则为:
包含转换用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在执行队列中的位置;
当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);
当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;
当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);
当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表示空操作;
当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);
当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);
当o1.t=Del,o2.t=Ins; 如果o1.p<o2.p,则ET(o1,o2)=Del(p1);如果o1.p>o2.p,则ET(o1,o2)=Del(p1+1);不存在o1.p=o2.p的情况;
当o1.t=Del,o2.t=Del; 如果o1.p<o2.p,则ET(o1,o2)=Del(p1);如果o1.p≥o2.p,则ET(o1,o2)=Del(p1+1)。
3.根据权利要求2所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的步骤3中在执行队列中找出与该操作具有并发关系的操作包括如下步骤:
将站点历史记录划分成因操作序列caList,并发操作序列coList两部分;从左到右扫描历史记录H[k],k∈{0,1,.....L},L为H的长度,并且记录与操作o具有因果关系的操作的位置n, n初始为-1;如果操作o与H[k]是并发关系,则继续判断第k+1个操作;如果操作o与H[k]的操作是因果关系,则对第k到n+2的操作交换H[k]和H[k-1]的位置,然后将n加1;
3.1当k-n<3时,记o1=H[k],o2=H[k-1];根据o1=H[k],o2=H[k-1]的操作类型,按照转换规则5-8,调用ET(o1,o2)的到o1’,然后根据o2.t和o1.t的操作类型,按照转换规则1-4,调用IT(o2,o1’)的到o2’;分别赋值H[k]=o2’,H[k-1]=o1’,实现了交换H[k],H[k-1],交换之后执行效果相同;
3.2当k-n≥3时,判断k-1到n+2的操作中是否存在{Ins(p,c),Del(p)}和{Del(p),Ins(p,c)的连续序列;
如果不存在,则根据op1=H[k],op2=H[k-1]的操作类型,按照转换规则5-8,调用ET(op1,op2)的到op1’,然后根据op2.t和op1.t的操作类型,按照转换规则1-4,调用IT(op2,op1’)的到op2’;分别赋值H[k]=op2’,H[k-1]=op1’,实现交换H[k]和H[k-1]的执行顺序,交换之后执行的效果相同;将k减1,继续上面的判断;如果存在,则按照如下两种情况进行处理:
存在{Ins(p,c),Del(p)},其中H[k]=o1,H[k-1]=Ins(p,c,dn,id)=o2,H[k-2]=Del(p)=o3;查询Dic<idnex1,idnex3>的值得到p1’,o1.p=p’;按照规则1调用IT(o3,o1)得到o3’,IT(o2,o1)=o2’;将三个操作的位置互换得到,H[k]=o3,H[k-1]=o2,H[k]=o1;
存在{Del(p),Ins(p,c)},其中H[k]=o1,H[k-1]=Ins(p,c,dn,id)=o2,H[k-2]=Del(p)=o3;如果o.p>o2.p,则o.dn加1;o.p≤o2.p,则o2.p加1,o1.p加1;将三个操作的位置互换得到,H[k]=o3,H[k-1]=o2,H[k]=o1。
4.根据权利要求3所述的一种基于操作转换的文本编辑实时协同方法,其特征在于:所述的步骤5包括如下步骤:
5.1当L-k≤2时,记op1=H[k],k∈{n+1,....,L};根据op和op1的操作类型,按照转换规则1-4,调用IT(op,op1)得到op1’;将k加1,继续进行判断并调用IT进行转换;
5.2当L-k>2时,判断n+1到L的操作中是否存在{Ins(p,c),Del(p)}和{Del(p),Ins(p,c)的连续序列;
存在{Ins(p,c),Del(p)},其中op1=H[k]=Ins(p,c,dn,id),op2=H[k+1]==Del(p);如果op.p>op1.p,则将op.dn加1,然后返回op’=op;如果op.p≤op1.p,则返回op’=op;
存在{Del(p),Ins(p,c)},其中op1=H[k]=Del(p),op2=H[k+1]==Ins(p,c,dn,id);如果op.t=Ins,则将op.p存入Dic<index1,index2>,其中index1等于L,index2为k;然后根据转换规则2调用IT(op,op1)得到op’,然后根据转换规则1调用IT(op’,op)得到op”;op”为操作op在该站点的执行形式;如果op.t=Del,op.p=op1.p,则操作op在该站点的执行形式为空操作, op.p不等于op1.p,则操作op为该站点的执行形式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410362735.9A CN104077425B (zh) | 2014-07-28 | 2014-07-28 | 一种基于操作转换的文本编辑实时协同方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410362735.9A CN104077425B (zh) | 2014-07-28 | 2014-07-28 | 一种基于操作转换的文本编辑实时协同方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104077425A true CN104077425A (zh) | 2014-10-01 |
CN104077425B CN104077425B (zh) | 2017-06-16 |
Family
ID=51598679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410362735.9A Expired - Fee Related CN104077425B (zh) | 2014-07-28 | 2014-07-28 | 一种基于操作转换的文本编辑实时协同方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104077425B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462037A (zh) * | 2014-11-04 | 2015-03-25 | 华南理工大学 | 文档协同编辑中的一致性维护方法 |
CN105808517A (zh) * | 2016-03-08 | 2016-07-27 | 武汉大学 | 一种操作包围盒的协同编辑一致性维护方法 |
CN108292300A (zh) * | 2016-01-13 | 2018-07-17 | 微软技术许可有限责任公司 | 用于对电子文档的协同编辑的自动保存操作 |
CN110738022A (zh) * | 2019-10-22 | 2020-01-31 | 上海海事大学 | 一种基于操作转换的html实时协同编辑方法 |
CN110807302A (zh) * | 2019-11-04 | 2020-02-18 | 北京联想协同科技有限公司 | 文档协同编辑方法及装置、终端和计算机可读存储介质 |
CN112929433A (zh) * | 2021-02-03 | 2021-06-08 | 北京深安未来科技有限公司 | 一种基于公证视频签署的安全数据交换方法 |
CN113190518A (zh) * | 2021-04-12 | 2021-07-30 | 中国人民解放军海军工程大学 | 基于移动云计算的协同编辑中一致性维护方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101127644A (zh) * | 2007-08-30 | 2008-02-20 | 复旦大学 | 一种大规模协同环境下的因果并发检测方法 |
US20150193404A1 (en) * | 2013-01-07 | 2015-07-09 | Google Inc. | Operational transformations proxy for thin clients |
-
2014
- 2014-07-28 CN CN201410362735.9A patent/CN104077425B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101127644A (zh) * | 2007-08-30 | 2008-02-20 | 复旦大学 | 一种大规模协同环境下的因果并发检测方法 |
US20150193404A1 (en) * | 2013-01-07 | 2015-07-09 | Google Inc. | Operational transformations proxy for thin clients |
Non-Patent Citations (1)
Title |
---|
廖斌、何发智、荆树旭: "实时协同工作系统中操作转换算法综述", 《计算机研究与发展》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462037B (zh) * | 2014-11-04 | 2017-09-26 | 华南理工大学 | 文档协同编辑中的一致性维护方法 |
CN104462037A (zh) * | 2014-11-04 | 2015-03-25 | 华南理工大学 | 文档协同编辑中的一致性维护方法 |
CN108292300B (zh) * | 2016-01-13 | 2022-06-24 | 微软技术许可有限责任公司 | 用于管理对电子文档的协同编辑的自动保存的装置和方法 |
CN108292300A (zh) * | 2016-01-13 | 2018-07-17 | 微软技术许可有限责任公司 | 用于对电子文档的协同编辑的自动保存操作 |
CN105808517A (zh) * | 2016-03-08 | 2016-07-27 | 武汉大学 | 一种操作包围盒的协同编辑一致性维护方法 |
CN105808517B (zh) * | 2016-03-08 | 2018-03-02 | 武汉大学 | 一种操作包围盒的协同编辑一致性维护方法 |
CN110738022A (zh) * | 2019-10-22 | 2020-01-31 | 上海海事大学 | 一种基于操作转换的html实时协同编辑方法 |
CN110738022B (zh) * | 2019-10-22 | 2023-06-16 | 上海海事大学 | 一种基于操作转换的html实时协同编辑方法 |
CN110807302A (zh) * | 2019-11-04 | 2020-02-18 | 北京联想协同科技有限公司 | 文档协同编辑方法及装置、终端和计算机可读存储介质 |
CN110807302B (zh) * | 2019-11-04 | 2023-12-19 | 北京联想协同科技有限公司 | 文档协同编辑方法及装置、终端和计算机可读存储介质 |
CN112929433A (zh) * | 2021-02-03 | 2021-06-08 | 北京深安未来科技有限公司 | 一种基于公证视频签署的安全数据交换方法 |
CN113190518B (zh) * | 2021-04-12 | 2022-04-15 | 中国人民解放军海军工程大学 | 基于移动云计算的协同编辑中一致性维护方法 |
CN113190518A (zh) * | 2021-04-12 | 2021-07-30 | 中国人民解放军海军工程大学 | 基于移动云计算的协同编辑中一致性维护方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104077425B (zh) | 2017-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104077425A (zh) | 一种基于操作转换的文本编辑实时协同方法 | |
CN107515878B (zh) | 一种数据索引的管理方法及装置 | |
CN111030861B (zh) | 一种边缘计算分布式模型训练方法、终端和网络侧设备 | |
CN103425630A (zh) | 协同系统构架及其一致性维护方法 | |
CN103780686A (zh) | 一种云组织内自定义申请审批流程的方法及系统 | |
CN105094970B (zh) | 一种求解分布式系统下可分任务多趟调度模型的方法 | |
Long et al. | Output-feedback stabilisation for a class of switched nonlinear systems with unknown control coefficients | |
Wu et al. | A deep learning approach for the dynamic dispatching of unreliable machines in re-entrant production systems | |
CN103606049A (zh) | 用于医疗系统的业务流程管理系统和业务流程管理方法 | |
PH12019000378A1 (en) | Systems and methods for converting human interactions to populate an electronic form | |
Demir et al. | Optimal and event-based networked control of physically interconnected systems and multi-agent systems | |
Manupati et al. | Intelligent search techniques for network-based manufacturing systems: multi-objective formulation and solutions | |
Babukarthik et al. | Hybrid algorithm for job scheduling: Combining the benefits of aco and cuckoo search | |
Cai et al. | A semi-transparent selective undo algorithm for multi-user collaborative editors | |
CN107547599B (zh) | 资源分配方法及系统 | |
Babaei et al. | Using fuzzy c-means clustering algorithm for common lecturers timetabling among departments | |
Yu et al. | Buffer allocation in a flow shop with capacitated batch transports | |
US20150310330A1 (en) | Computer-implemented method and system for digitizing decision-making processes | |
CN112818183B (zh) | 一种数据合成方法、装置、计算机设备和存储介质 | |
Wang et al. | Time delay and packet dropout compensation for networked control systems: a linear estimation method | |
CN102682178A (zh) | 一种异构cad在线集成中的一致性维护方法 | |
Elango et al. | Distributed hybrid multiagent task allocation approach for dual-nozzle 3D printers in microfactories | |
Manfredi | Robust scalable stabilisability conditions for large-scale heterogeneous multi-agent systems with uncertain nonlinear interactions: towards a distributed computing architecture | |
Gołuńska et al. | A consensus reaching support system based on concepts of ideal and anti-ideal point | |
Kholod et al. | Creation of data mining cloud service on the actor model |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170616 Termination date: 20180728 |
|
CF01 | Termination of patent right due to non-payment of annual fee |