專利名稱:基于半分布式實時協(xié)同編輯軟件的協(xié)同處理方法
技術(shù)領(lǐng)域:
本發(fā)明提供了一種協(xié)同處理方法,具體涉及一種半分布式實時協(xié)同編輯軟件的協(xié)同處理方法。
背景技術(shù):
實時協(xié)同編輯軟件(CollaborativeReal-time Editing Software,簡稱CRES)支持分布在不同地理位置的作者來對文檔進(jìn)行協(xié)同編輯,在實時性方面有很高的要求。CRES 需要在協(xié)同編輯過程中保持文檔的一致性以及對編輯中出現(xiàn)的沖突做出處理。協(xié)同編輯中文檔的一致性是指在進(jìn)行協(xié)同編輯過程中需要滿足收斂,因果保持,意圖保持。其中收斂要求一組操作在所有的站點上的執(zhí)行順序相同;因果保持則要求有因果關(guān)系的操作按照他們產(chǎn)生的先后順序在所有的站點上執(zhí)行;意圖保持則要求操作在所有的站點上按照它們產(chǎn)生的意圖來改變文檔。1997 ip, Sun ^A^ifei "A Generic Operation Transformation Scheme for Consistency Maintenance in Real-time Cooperative Editing Systems" (Proceedings of the international ACM SIGGROUP conference on Supporting group work :the integration challenge ACM New York, NY, USA 1997) ψ | [ij Generic Operation Transformation算法(簡稱GOT)。GOT是針對分布式結(jié)構(gòu)的CRES設(shè)計的協(xié)同處理算法。 GOT設(shè)計了一種狀態(tài)向量計算算法來實現(xiàn)收斂和因果保持的要求,并且通過定義包含變換 (Include Transformation)和排除變換(Exclude Transformation)來實現(xiàn)意圖保持。但是在GOT算法中狀態(tài)向量計算規(guī)則復(fù)雜,在實現(xiàn)收斂策略時需要先撤消(Undo)已經(jīng)執(zhí)行的操作,同時在實現(xiàn)意圖保持時需要對操作隊列進(jìn)行兩次遍歷。另外分布式的CRES也存在很難進(jìn)行文檔管理、編輯權(quán)限管理等問題。
發(fā)明內(nèi)容
為了便于說明,本文約定“半分布式CRES”表示CRES的協(xié)同站點,分為客戶端站點和服務(wù)器站點,通訊只在服務(wù)器站點和客戶端站點之間進(jìn)行(如圖1)?!翱蛻舳苏军c”表示半分布式CRES中參與協(xié)同編輯的客戶端(如圖1中的CC_1,CC_2)?!胺?wù)器站點”表示半分布式CRES中的服務(wù)器端(如圖1中的CS)。操作在客戶端站點產(chǎn)生之后會封裝成消息發(fā)送到服務(wù)器站點(使用0或是Oi來表示,其中i為正整數(shù));操作在服務(wù)器站點處理后將再一次封裝為消息發(fā)送到客戶端站點(使用EO或是EOi來表示,其中i為正整數(shù)),因此, 根據(jù)上下文“操作”可以等同于“消息”。EOi表示操作Oi在服務(wù)器站點進(jìn)行意圖保持處理后的結(jié)果,EOi將被服務(wù)器站點發(fā)送到客戶端站點;EO表示操作0在服務(wù)器站點上進(jìn)行意圖保持處理后的結(jié)果,EO將被服務(wù)器發(fā)送到客戶端站點。本發(fā)明的目的是提供一種新的方法,使得能夠利用半分布式CRES站點間通訊的特征通過對操作進(jìn)行編號來實現(xiàn)因果保持和收斂性而不需要撤消已經(jīng)執(zhí)行的操作;通過引入多視角隊列(即客戶端站點上下文隊列,因為從各個客戶端看到的隊列的元素順序不同,所以本文稱之為多視角隊列)來實現(xiàn)對只需要操作隊列進(jìn)行一次遍歷并只使用包含變換來實現(xiàn)意圖保持。使得CRES在保證文檔一致性時減少對文檔的操作次數(shù)并且提高算法對操作的處理速度。本發(fā)明提供的技術(shù)方案如下—種基于半分布式實時協(xié)同編輯軟件的協(xié)同處理方法,其特征在于,所述協(xié)同處理滿足收斂、因果保持和意圖保持的方法如下A.實現(xiàn)服務(wù)器端因果保持的方法Al.在服務(wù)器站點對所有的客戶端站點進(jìn)行編號,假如有N個客戶端站點,則這些站點的編號分別為0,1,...,N-1 ;然后在服務(wù)器站點上定義一個長度為N的一維數(shù)組SV作為狀態(tài)向量(N為站點個數(shù)),其中SV[k]記錄服務(wù)器站點接受的來自編號為k的客戶端站點的操作的個數(shù)(k e {0,1,. . .,N-1}),并且SV[k]初始化為SV[k] = 0 (注a = b表示把b賦值給a,下同);在編號為k的客戶端站點上定義一個變量SVk記錄該站點發(fā)送了的操作次數(shù),SVk初始化為SVk = 0 ;A2.對于編號為k的客戶端站點,如果它產(chǎn)生一個操作0,則SVk = SVk+l ;0在被發(fā)送時將SVk作為附加信息,即0. SVk ;A3.服務(wù)器站點接受0的條件是SV [k] ==0.SVk-l(注“==”表示相等),否則該消息將被延時處理以便保證服務(wù)器站點按照客戶端站點產(chǎn)生操作的順序來處理這些操作;A4.服務(wù)器站點如果接受操作0,則SV [k] = 0. SVk ;B.實現(xiàn)客戶端因果保持的方法Bi.在服務(wù)器站點上定義一個變量SS記錄服務(wù)器站點發(fā)送操作的個數(shù),并且將SS 初始化SS = 0 ;在編號為k的客戶端站點上定義一個變量SSk記錄該客戶端站點接受來自服務(wù)器站點的操作的個數(shù),SSk初始化為SSk = 0 ;B2.服務(wù)器站點如果發(fā)送操作EOJU SS = SS+1 ;EO在被發(fā)送時將SS作為附加信息,即 E0. SS ;B3.編號為k的客戶端站點接受EO的條件是SSk == E0. SS_1,否則該消息將被延時處理以便保證客戶端站點按照服務(wù)器站點接受操作的順序來處理這些操作;B4.編號為k的客戶端站點如果接受操作EOJj SSk = E0. SS ;C.在服務(wù)器站點和客戶端站點按照步驟A和步驟B中所定義的方法處理操作后, 客戶端站點和服務(wù)器站點就能夠按照相同的順序處理操作,因此也就滿足了收斂性的要求;D.實現(xiàn)服務(wù)器站點意圖保持的方法Dl.服務(wù)器站點為每一個客戶端站點維護(hù)一個上下文隊列,編號為i的客戶端站點的上下文隊列為HB[i],并且HB[i]初始化為HB[i] = Φ (即初始化為一個空隊列); HB[i] [j]表示上下文隊列HB[i]中的第j個操作;D2.對于服務(wù)器接受的操作0,使用0. id表示產(chǎn)生該操作的客戶端站點的編號, 0. SS表示客戶端站點產(chǎn)生操作0時該客戶端站點上定義的變量SSk的值;D3.當(dāng)一個服務(wù)器站點按照A3,A4中步驟對操作進(jìn)行處理后,上下文隊列中ΗΒ
中從0. SS開始的每一個操作0',如果0' . id乒0. id則先執(zhí)行0〃 = ΙΤ(0,0'),然后使用0〃 ‘ = ΙΤ(0',0)代替隊列中的操作0',最后執(zhí)行0 = 0〃,并開始對隊列中下一個操作按照步驟D3處理;所述IT為包含變換函數(shù),IT (X,Y)表示考慮操作Y的影響并且實現(xiàn)操作X原來的意圖;D4.將操作0加入到服務(wù)器站點維護(hù)的每一個上下文隊列中;Ε.實現(xiàn)客戶端站點意圖保持的方法;El.在客戶端站點使用變量CC_ID來表示該客戶端站點的編號;客戶端站點維護(hù)一個上下文隊列HB,并且HB初始化為HB = Φ ;客戶端使用變量MsgReturn來記錄由該客戶端發(fā)送到服務(wù)器,并且從服務(wù)器返回的操作的個數(shù);Ε2.服務(wù)器發(fā)送的操作EO使用Ε0. SS來表示服務(wù)器站點發(fā)送操作EO時變量SS的值;Ε0. id表示操作EO產(chǎn)生的站點的編號;E3.如果 E0. id == CC_ID,則 MsgReturn = MsgReturn+1 ;否則執(zhí)行步驟 E4 ;E4.對于上下文隊列HB中從MsgReturn開始的每一個操作0',先執(zhí)行E0"= ΙΤ(Ε0,0'),然后使用0〃 ‘ = ΙΤ(0',Ε0)代替隊列中的操作0',最后執(zhí)行O = EO〃并開始對隊列中下一個操作按照步驟Ε4處理。步驟D3中所述包含變換函數(shù)IT所實現(xiàn)的功能為,對本操作所表示的編輯位置進(jìn)行調(diào)整使得本操作考慮到其他操作的影響并且保持本操作原來的意圖。在協(xié)同編輯過程中發(fā)送的操作含有兩個基本數(shù)據(jù)1.該操作編輯的位置;2.編輯的內(nèi)容。當(dāng)操作發(fā)送到一個站點時由于該站點上的文檔可能已經(jīng)改變,所以操作需要對編輯的位置進(jìn)行調(diào)整以實現(xiàn)原來的意圖。該函數(shù)的實現(xiàn)和操作的具體類型相關(guān),在具體實現(xiàn)時根據(jù)具體操作的關(guān)系來定義包含變換函數(shù)。例如對于兩個插入字符的操作在下文的具體實施說明方式部分通過實例描述了包含變換函數(shù)的具體實現(xiàn)。優(yōu)選的,在服務(wù)器站點為每一個客戶端站點維護(hù)一個上下文隊列,當(dāng)操作到達(dá)服務(wù)器站點后按照步驟D中定義的意圖保持方法進(jìn)行處理;在客戶端站點為服務(wù)器站點維護(hù)上下文隊列,服務(wù)器站點發(fā)送的操作到達(dá)客戶端站點后按照步驟E中定義的意圖保持方法進(jìn)行處理;因此意圖保持方法不需要先逆向執(zhí)行排除變換然后再正向執(zhí)行包含變換,每一個操作在發(fā)送到其他站點時所需要附加的信息減少了。優(yōu)選的,將一致性的要求和實時協(xié)同編輯軟件的結(jié)構(gòu)結(jié)合起來;實時協(xié)同編輯軟件的站點被分為客戶端站點和服務(wù)器站點,通訊只在服務(wù)器站點和客戶端站點之間進(jìn)行; 在這個基礎(chǔ)之上通過步驟A和步驟B中的方法實現(xiàn)因果保持的要求。優(yōu)選的,通訊只在服務(wù)器站點和客戶端站點之間進(jìn)行,在服務(wù)器站點和客戶端站點都滿足了因果保持的要求的基礎(chǔ)上,可以保證服務(wù)器站點和客戶端站點都按照相同的順序執(zhí)行操作,因而滿足了收斂的要求并且不需要單獨定義算法來滿足收斂的要求。本發(fā)明的有益效果利用本發(fā)明提供的技術(shù)方案,可以降低協(xié)同處理算法實現(xiàn)的難度。GOT在實現(xiàn)收斂策略時需要先撤消已經(jīng)執(zhí)行的操作,而本發(fā)明的收斂性策略不需要對文檔進(jìn)行撤銷操作;GOT設(shè)計了一種復(fù)雜的狀態(tài)向量計算算法來實現(xiàn)因果保持,而本發(fā)明的因果保持策略通過對操作進(jìn)行編號從而避免了復(fù)雜的狀態(tài)向量計算;GOT在實現(xiàn)意圖保持時先逆向執(zhí)行排除變換然后再正向執(zhí)行包含變換,因此需要對上下文隊列進(jìn)行兩次遍歷,而本發(fā)明的意圖保持策略只需要執(zhí)行包含變換,因而只需要對上下文隊列進(jìn)行一次遍
歷;同時每一個操作在發(fā)送到其他站點時所需要附加的信息也減少;半分布式CRES利于進(jìn)
行文檔管理,編輯權(quán)限管理。
圖1半分布式結(jié)構(gòu)CRES的一個協(xié)同編輯場景。圖2分布式結(jié)構(gòu)CRES的一個協(xié)同編輯場景。
具體實施例方式服務(wù)器站點意圖保持算法的說明對于服務(wù)器站點可以根據(jù)上文步驟D定義如下算法處理步驟
tempOperation=0;
id=0.id
for(i= O SS; i<|HB[id]|; i++){ //開始對操作O進(jìn)行包含變換
if(id!=HB[id][j].id){ //包含變換只在來自不同站點的操作之間進(jìn)行 tempOperationl=IT(tempOperation, HB[id][i]) //對操作進(jìn)行包含變換 HB[id][i]=IT(HB[id][i], tempOperation) //對隊列中的操作進(jìn)行調(diào)整 tempOperation= tempOperation 1
EO=tempOperation;
EOSS= |HB[id]|
HBAdd(EO);_對于客戶端站點可以根據(jù)上文步驟E定義如下算法處理步驟
tempOperation=EO;
id=E0.id
if(id== CC_ID){ Il如果這個操作是在本站點上產(chǎn)生則不需要進(jìn)行包含變換 MsgReturn++; SS=EO.SS; return;
}
for(i= MsgReturn; i<|HB|; i++){
tempOperationl=nXtempOperation, HB[i])//對操作進(jìn)行包含變換 HB[i]=IT(HB[i], tempOperation)//調(diào)整隊列中的操作
tempOperation= tempOperation 1
}
EO= tempOperation;
SS=EO.SS_包含變換函數(shù)(Include Transformation, IT)說明圖2描述的是分布式結(jié)構(gòu)CRES的一個協(xié)同編輯場景。SiteO,Sitel, Site2是三
個協(xié)同站點。在分布式的CRES中各個站點間相互通訊。當(dāng)一個操作產(chǎn)生后,該操作將會被
7發(fā)送到其他站點。例如圖中操作O1在產(chǎn)生后將會被發(fā)送到站點Sitel,Site2。假設(shè)圖2中所有站點的文檔內(nèi)容最初始為“ABCDEF”。假設(shè)操作O1的意圖是字符” A”前面插入一個字符“0”,記為=O1 = insert [ “0”,0];操作O2的意圖是在字符“B”前面插入一個字符“ 1”, 記為02 = insert [ “1”,1]。按照意圖保持的要求,當(dāng)SiteO和Sitel在執(zhí)行操作O1及O2 之后結(jié)果應(yīng)該為“0A1B⑶EF”。但是當(dāng)操作O2到達(dá)了站點SiteO時如果O2不加任何的處理而直接在SiteO上執(zhí)行,在SiteO的結(jié)果為“01AB⑶EF”。這明顯是錯誤的。因此為了保證 O2的意圖能在站點SiteO上得到實現(xiàn),則應(yīng)該對O2進(jìn)行包含變換。操作O2 = IT(O25O1)是對操作O2執(zhí)行包含變換的結(jié)果。操作O2考慮到O1的影響并且在站點siteO上實現(xiàn)O2的意圖。根據(jù)以上的具體情況可知O2 = IT(02,O1) = inSert[ “1”,2],則當(dāng)02代替操作02在站點SiteO上執(zhí)行后SiteO的結(jié)果為“0A1BCDEF”。這樣就保證了站點siteO和sitel上的文檔最終是一致的。通過以上分析可知包含變換函數(shù)是對操作O2編輯的位置向后移動一個字符(因為操作O1在操作O2編輯的位置的前面插入了一個字符)。客戶端站點上下文隊列(即多視角隊列)說明在本算法的意圖保持策略中,服務(wù)器站點將為每一個客戶端站點維護(hù)一個上下文隊列。這樣做的目的是使得服務(wù)器站點在處理一個操作時只需要執(zhí)行包含轉(zhuǎn)換即可。每個客戶端站點按照它的上下文隊列中的操作的順序來執(zhí)行這些操作,但是最后文檔結(jié)果是一致的??蛻舳苏军c的上下文隊列中操作的順序是從該客戶端站點的角度看到的順序,因此這種上下文隊列也稱為視角隊列。例如三個不同客戶端站點CC_1,CC_2, CC_3分別執(zhí)行 7 O1 = Insert [ “0”,0],O2 = Insert [ “1”,1],O3 = Insert [ “2”,2]三個操作,這些操作到達(dá)服務(wù)器站點的順序為OnOyO3t5在CC_1看來這些操作執(zhí)行的順序為InSert[ “0”,
0],Insert[ “1”,2],Insert [ “2”,4],服務(wù)器站點將操作按照這個順序放在一個新隊列中,即客戶端站點CC_1的上下文隊列;在CC_2看來這些操作執(zhí)行的順序為InSert[ “1”,
1],Insert[“0”,0],Insert [ “2”,4],服務(wù)器站點將操作按照這個順序放在一個新隊列中,即客戶端站點CC_2上下文隊列;在CC_3看來這些操作執(zhí)行的順序為InSet[ “2”,2], Insertt “0”,0],Insert [ “ 1 ”,2],服務(wù)器站點將操作按照這個順序放在一個新隊列中,即客戶端站點CC_3上下文隊列。通過這個實例可以得知每個客戶端站點的上下文隊列中操作的順序是將原來隊列中由該站點產(chǎn)生的操作放在上下文隊列的前面,而其他的操作按照原來順序加入到上下文隊列。操作在加入到上下文隊列時需要保持原來的意圖。例如客戶端站點CC_2的上下文隊列是將原來的第二個操作(即操作O2)作為CC_2下文隊列的第一個操作,而原來的第一個,第三個操作按照原來的順序加入到上下文隊列中;操作O1加入到CC_2的上下文隊列時需要在考慮到O2的影響并且保持原來的意圖,即CC_2上下文中的第二個操作為Insert [ “0”,0],同理第三個操作為Insert [ “2”,4]。這個過程的具體實施可參考上文意圖保持算法說明部分。這樣做的目的是使得當(dāng)服務(wù)器站點在處理下一個操作時只需要執(zhí)行包含變換而不需要和GOT中那樣需要先執(zhí)行排除變換然后再執(zhí)行包含變換。例如如果現(xiàn)在需要處理一個來自客戶端站點CC_1的操作O4 = insert [“3”,4],按照上述步驟D2中描述,需要將O4 和CC_1視角隊列中的第二個,第三個操作執(zhí)行包含轉(zhuǎn)換。即最后EO4 = insert[ “4”,6]。 當(dāng)處理完成之后,EO4可以直接放入到CC_1,CC_2, CC_3視角隊列的隊尾。在CC_1的視角隊列中還需要對原來隊列中的第二個、第三個操作進(jìn)行包含變換使得它們能夠考慮到操作EO4的影響。這實際上是對CC_1的視角隊列做一個調(diào)整,使得下一個來自CC_1的操作也能按照O4這樣的順序進(jìn)行處理。下面通過舉例來說明意圖保持算法的工作原理。意圖保持策略實例說明圖1中描述的是半分布式結(jié)構(gòu)的CRES的一個協(xié)同編輯場景。在半分布式結(jié)構(gòu)的 CRES中,站點分為客戶端站點和服務(wù)器站點。客戶端站點如圖中的CC_1,CC_2 ;服務(wù)器站點如圖中的CS。半分布式結(jié)構(gòu)的CRES站點間的通訊方式是客戶端站點將消息發(fā)送到服務(wù)器站點,在服務(wù)器站點上進(jìn)行處理完成后由服務(wù)器站點推送到客戶端站點。例如圖中操作O1 在站點CC_1上產(chǎn)生后發(fā)送到服務(wù)器站點,在服務(wù)器站點處理完成后將處理完的結(jié)果EO1發(fā)送到客戶端站點。下面以圖1為例來說明算法的處理過程。假如O2 = insert [ “ 0 ”,0],O3 = insert [ “ 1”,3],O1 = insert [ “ 2 ”,2]。服務(wù)器站點處理的步驟如下服務(wù)器站點為每個客戶端站點建立一個上下文隊列。站點CC_1的上下文為 HB[1],CC_2的上下文為HB[2]。初始值HB □口 = Φ。當(dāng)O2到達(dá)服務(wù)器站點時,由于ΗΒ[2] = Φ,O2不需要進(jìn)行包含變換,服務(wù)器站點執(zhí)行 O2 (EO2 = O2)。同時 HB [1] · Add (EO2),HB [2] · Add (EO2)。當(dāng)O3到達(dá)服務(wù)器站點時,HB[2] = [EO2],而03是依賴于EO2的,按照算法中描述,所以O(shè)3也不進(jìn)行包含變換,在服務(wù)器站點上執(zhí)行EO3 (EO3 = O3)。同時HB [1]. Add (EO3),HB [2] · Add (EO3) ο當(dāng)O1到達(dá)服務(wù)器站點時,HB[1] = [E02,EO3],由于OJPEO2沒有依賴關(guān)系,第一步 O1,= IT(OijEO2) = insert [ “2”,3] ;EO2' = IT(EO2jO1) = insert [ “0”,0];使用 EO2,代替 HB[1]中的 E02。第二步()/,= IT(OZjEO3) = insert [ “2”,3] ;EO/ = IT (EO3,01')= insert[ “1,,,4];使用 E03,代替 HB[1]中的 E03。第三步執(zhí)行 O1 ”;HB[2]. Add(EO1),HB[1] Add(EO1)(注=EO1 = O1") ο當(dāng)O4到達(dá)服務(wù)器站點時,根據(jù)算法,O4和HB [1]
(即隊列HB [1]中的操作EO2), HB[1] [1](即隊列HB[1]中的操作EO3)執(zhí)行包含轉(zhuǎn)換,處理過程和O1的處理過程類似。同理可分析O5在服務(wù)器站點的處理過程??蛻舳苏军c處理步驟如下(以站點CC_1為例)當(dāng)CC_1產(chǎn)生O1, O4之后,在客戶端站點CC_1,HB = [O1, O4]。當(dāng)操作EO2到達(dá)客戶端站點CC_1時,為了保持EO2的意圖,EO2需要和O1,04分別進(jìn)行包含變換,同時調(diào)整上下文保證EO3達(dá)到時仍按照這個順序處理。當(dāng)EO1到達(dá)CC_1時,由于EO1的原始操作O1在站點CC_1上產(chǎn)生,因而EO1的意圖已經(jīng)在該站點上實現(xiàn)。因此不進(jìn)行變換處理,同時MsgReturn++ ;同樣EO4到達(dá)時,也按照這樣的步驟處理。當(dāng)EO5到達(dá)時由于MsgRetum = 2,按照算法中的描述,EO5不需要和O1, O4進(jìn)行變換,這是因為EO5在服務(wù)器站點執(zhí)行時已經(jīng)考慮到O1, O4的影響。算法復(fù)雜度說明算法時間復(fù)雜度假設(shè)有η個協(xié)同站點參與協(xié)同編輯,CRES已經(jīng)處理過m個消息, 則對于任何一個新產(chǎn)生的操作,根據(jù)定義的算法在處理該操作時需要對操作隊列進(jìn)行一次遍歷,因此算法的時間復(fù)雜度為0(m)。
算法空間復(fù)雜度根據(jù)定義的算法,由于服務(wù)器站點為每個協(xié)同站點維護(hù)η個視角,因此需要的存儲空間為m*n。傳統(tǒng)的GOT算法在實現(xiàn)因果保持和收斂時都需要復(fù)雜的狀態(tài)向量計算。對于一個操作,因果保持和收斂處理的時間復(fù)雜度為O(n),而意圖保持需要對隊列進(jìn)行兩次遍歷,因此時間復(fù)雜度為0(2m)。最后總體的時間復(fù)雜度為0(2m)+0(n)。另外還可以從兩種算法處理一個操作時對文檔更新的次數(shù)的角度來比較。本算法處理一個操作時只需要在因果保持之后對文檔進(jìn)行一次更新。而GOT算法由于在實現(xiàn)收斂時需要先撤消隊列中的操作,然后再將操作更新到文檔,因此處理一個操作時GOT需要對文檔進(jìn)行2m次操作。在實際的應(yīng)用中,對文檔的更新是最耗時間的部分。以本算法驗證程序Spreadsheet為例在服務(wù)器端刪除一行相當(dāng)于將數(shù)組中的元素依次向前移動一個位置。對于GOT算法,處理一個操作需要對文檔進(jìn)行2m次類似的操作,而本算法只需要進(jìn)行一次。
10
權(quán)利要求
1. 一種基于半分布式實時協(xié)同編輯軟件的協(xié)同處理方法,其特征在于,所述協(xié)同處理滿足收斂、因果保持和意圖保持的方法如下A.實現(xiàn)服務(wù)器端因果保持的方法Al.在服務(wù)器站點對所有的客戶端站點進(jìn)行編號,假如有N個客戶端站點,則這些站點的編號分別為0,1,. . .,N-1 ;然后在服務(wù)器站點上定義一個長度為N的一維數(shù)組SV作為狀態(tài)向量,其中SV[k]記錄服務(wù)器站點接受的來自編號為k的客戶端站點的操作的個數(shù),并且 SV[k]初始化為SV[k] = 0 ;在編號為k的客戶端站點上定義一個變量SVk記錄該站點發(fā)送了的操作次數(shù),SVk初始化為SVk = 0 ;A2.對于編號為k的客戶端站點,如果它產(chǎn)生一個操作0,則SVk = SVk+l ;0在被發(fā)送時將SVk作為附加信息,即0. SVk;A3.服務(wù)器站點接受0的條件是SV[k] ==0.SVk-l,否則該消息將被延時處理以便保證服務(wù)器站點按照客戶端站點產(chǎn)生操作的順序來處理這些操作; A4.服務(wù)器站點如果接受操作0,則SV[k] = 0. SVk ;B.實現(xiàn)客戶端因果保持的方法Bi.在服務(wù)器站點上定義一個變量SS記錄服務(wù)器站點發(fā)送操作的個數(shù),并且將SS初始化SS = 0 ;在編號為k的客戶端站點上定義一個變量SSk記錄該客戶端站點接受來自服務(wù)器站點的操作的個數(shù),SSk初始化為SSk = 0 ;B2.服務(wù)器站點如果發(fā)送操作E0,則SS = SS+1 ;EO在被發(fā)送時將SS作為附加信息,即 E0. SS ;B3.編號為k的客戶端站點接受EO的條件是SSk = = E0. SS-1,否則該消息將被延時處理以便保證客戶端站點按照服務(wù)器站點接受操作的順序來處理這些操作; B4.編號為k的客戶端站點如果接受操作E0,則SSk = E0. SS ;C.在服務(wù)器站點和客戶端站點按照步驟A和步驟B中所定義的方法處理操作后,客戶端站點和服務(wù)器站點就能夠按照相同的順序處理操作,因此也就滿足了收斂性的要求;D.實現(xiàn)服務(wù)器站點意圖保持的方法Dl.服務(wù)器站點為每一個客戶端站點維護(hù)一個上下文隊列,編號為i的客戶端站點的上下文隊列為HB [i],并且HB [i]初始化為HB [i] = Φ ;HB[i][j]表示上下文隊列HB[i]中的第j個操作;D2.對于服務(wù)器接受的操作0,使用0. id表示產(chǎn)生該操作的客戶端站點的編號,0. SS表示客戶端站點產(chǎn)生操作0時該客戶端站點上定義的變量SSk的值;D3.當(dāng)一個服務(wù)器站點按照A3,A4中步驟對操作進(jìn)行處理后,上下文隊列中HB
中從0. SS開始的每一個操作0',如果0' . id乒0. id則先執(zhí)行0〃 = ιτ(ο,0'),然后使用0〃 ’ = ΙΤ(0',0)代替隊列中的操作0',最后執(zhí)行0 = 0〃,并開始對隊列中下一個操作按照步驟D3處理;所述IT為包含變換函數(shù),IT(X,Y)表示考慮操作Y的影響并且實現(xiàn)操作X原來的意圖;D4.將操作0加入到服務(wù)器站點維護(hù)的每一個上下文隊列中; Ε.實現(xiàn)客戶端站點意圖保持的方法;El.在客戶端站點使用變量CC_ID來表示該客戶端站點的編號;客戶端站點維護(hù)一個上下文隊列HB,并且HB初始化為HB = Φ ;客戶端使用變量MsgReturn來記錄由該客戶端發(fā)送到服務(wù)器,并且從服務(wù)器返回的操作的個數(shù);Ε2.服務(wù)器發(fā)送的操作EO使用Ε0. SS來表示服務(wù)器站點發(fā)送操作EO時變量SS的值;Ε0. id表示操作EO產(chǎn)生的站點的編號;E3.如果 E0. id == CC_ID,則 MsgReturn = MsgReturn+1 ;否則執(zhí)行步驟 E4 ;E4.對于上下文隊列HB中從MsgReturn開始的每一個操作0',先執(zhí)行E0〃 = IT (E0, 0'),然后使用0〃 ‘ = ΙΤ(0',Ε0)代替隊列中的操作0',最后執(zhí)行O = EO〃并開始對隊列中下一個操作按照步驟Ε4處理。
2.如權(quán)利要求1所述的協(xié)同處理方法,其特征在于,在服務(wù)器站點為每一個客戶端站點維護(hù)一個上下文隊列,當(dāng)操作到達(dá)服務(wù)器站點后按照步驟D中定義的意圖保持方法進(jìn)行處理;在客戶端站點為服務(wù)器站點維護(hù)上下文隊列,服務(wù)器站點發(fā)送的操作到達(dá)客戶端站點后按照步驟E中定義的意圖保持方法進(jìn)行處理;意圖保持方法不需要先逆向執(zhí)行排除變換然后再正向執(zhí)行包含變換。
3.如權(quán)利要求1所述的協(xié)同處理方法,其特征在于,將一致性的要求和實時協(xié)同編輯軟件的結(jié)構(gòu)結(jié)合起來;實時協(xié)同編輯軟件的站點被分為客戶端站點和服務(wù)器站點,通訊只在服務(wù)器站點和客戶端站點之間進(jìn)行;在這個基礎(chǔ)之上通過步驟A和步驟B中的方法實現(xiàn)因果保持的要求。
4.如權(quán)利要求1所述的協(xié)同處理方法,其特征在于,通訊只在服務(wù)器站點和客戶端站點之間進(jìn)行,在服務(wù)器站點和客戶端站點都滿足了因果保持的要求的基礎(chǔ)上,可以保證服務(wù)器站點和客戶端站點都按照相同的順序執(zhí)行操作,因而滿足了收斂的要求并且不需要單獨定義算法來滿足收斂的要求。
全文摘要
本發(fā)明公布了一種基于半分布式實時協(xié)同編輯軟件的協(xié)同處理方法。本發(fā)明利用半分布式CRES站點間通訊的特征通過對操作進(jìn)行編號來實現(xiàn)因果保持和收斂性;通過引入多視角隊列來實現(xiàn)對只需要操作隊列進(jìn)行一次遍歷并只使用包含變換來實現(xiàn)意圖保持。利用本發(fā)明提供的技術(shù)方案,可以降低協(xié)同處理算法實現(xiàn)的難度。收斂性策略不需要對文檔進(jìn)行撤銷操作;因果保持策略避免了復(fù)雜的狀態(tài)向量計算;意圖保持策略不需要先逆向執(zhí)行排除變換然后再正向執(zhí)行包含變換;同時每一個操作在發(fā)送到其他站點時所需要附加的信息也減少;半分布式CRES利于進(jìn)行文檔管理,編輯權(quán)限管理。
文檔編號G06F9/44GK102355478SQ20111019421
公開日2012年2月15日 申請日期2011年7月12日 優(yōu)先權(quán)日2011年7月12日
發(fā)明者謝丹, 郁蓮 申請人:北京大學(xué)