級的數(shù)據(jù)交換協(xié)議)數(shù)據(jù)協(xié)議。它基于JavaScript的一個子集并且采用了完全獨立于語言的文本協(xié)議,但是也使用了類似于C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言,易于人閱讀和編寫,同時也易于機器解析和生成。具體的,差值操作(diff)和修訂操作(patch)是一對工具,數(shù)學上說,差值操作是對兩個集合的差運算,修訂操作是對兩個集合的和運算。差值操作比較兩個文件或文件集合的差異,并記錄下來,生成一個差值文件,即補丁文件。
[0042]在本實施例的一些實現(xiàn)方式中,從數(shù)據(jù)的角度考慮,可以對兩個狀態(tài)的數(shù)據(jù)交換格式做一次“比對”,求出差值。如果將前一次的通過數(shù)據(jù)交換格式所得值記為a,后一次的通過數(shù)據(jù)交換格式所得值記為b。那么,就可以定義一次差值操作:令差值=a和b的差值。那么差值稱之為差值數(shù)據(jù)包。
[0043]在本實施例的一些實現(xiàn)方式中,合并操作指代的是廣義的合并操作,可選的,包括了刪除、添加、覆蓋等操作。在通常情況下,用戶進行文檔修訂時所能產(chǎn)生的操作均屬于合并操作的類型。
[0044]步驟202,向客戶端回復帶所述編號的確認消息,同時給所有正在協(xié)作編輯的其他客戶端發(fā)送廣播消息。
[0045]在本實施例中,廣播是多點投遞的最普遍的形式,它向每一個目的站投遞一個數(shù)據(jù)包的拷貝。它可以通過多個單次數(shù)據(jù)包的投遞完成,也可以通過單獨的連接傳遞數(shù)據(jù)包的拷貝,直到每個接收方均收到一個拷貝為止。在多數(shù)網(wǎng)絡(luò)中,用戶是通過把數(shù)據(jù)包分送給一個特殊保留的地址即廣播地址來進行廣播投遞。
[0046]在本實施例的一些實現(xiàn)方式中,進行實時協(xié)作編輯的,客戶端和服務(wù)器之間不用發(fā)送整個數(shù)據(jù)交換格式文件了,只需要傳輸產(chǎn)生差異的部分,即這些修訂數(shù)據(jù)包就可以了。服務(wù)器端收到后,將其與服務(wù)器端的文件合并并編號后,返回給該客戶端該修訂數(shù)據(jù)包的一個確認,給其余的客戶端廣播該修訂數(shù)據(jù)包及編號。這樣所有的客戶端按照編號的順序依次合并就可以得到和服務(wù)器內(nèi)容相同的數(shù)據(jù)交換格式文件。
[0047]請參考圖3,其示出了根據(jù)本申請的文檔協(xié)作編輯方法的又一個實施例的客戶端消息傳遞示意圖300。本實施例所述的用于文檔協(xié)作編輯方法的流程圖300包括以下步驟:
[0048]步驟301,向服務(wù)器發(fā)送修訂信息,所述修訂信息通過差值操作獲得。
[0049]在本實施例中,采用了JSON (JavaScript Object Notat1n,JavaScript 對象表示法,一種輕量級的數(shù)據(jù)交換協(xié)議)數(shù)據(jù)協(xié)議。它基于JavaScript的一個子集并且采用了完全獨立于語言的文本協(xié)議,但是也使用了類似于C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言,易于人閱讀和編寫,同時也易于機器解析和生成。具體的,差值操作(diff)和修訂操作(patch)是一對工具,數(shù)學上說,差值操作是對兩個集合的差運算,修訂操作是對兩個集合的和運算。差值操作比較兩個文件或文件集合的差異,并記錄下來,生成一個差值文件,即補丁文件。
[0050]在本實施例的一些實現(xiàn)方式中,從數(shù)據(jù)的角度考慮,可以對兩個狀態(tài)的數(shù)據(jù)交換格式做一次“比對”,求出差值。如果將前一次的通過數(shù)據(jù)交換格式所得值記為a,后一次的通過數(shù)據(jù)交換格式所得值記為b。那么,就可以定義一次差值操作:令差值=a和b的差值。那么差值稱之為差值數(shù)據(jù)包。
[0051]步驟302,接收服務(wù)器發(fā)送的確認消息,所述確認消息帶有所述修訂信息的編號。
[0052]在本實施例中,服務(wù)器接收到客戶端發(fā)送的修訂數(shù)據(jù)包并進行編號和合并操作后,將編號信息加入到確認消息中并反饋給發(fā)送修訂數(shù)據(jù)包的客戶端。
[0053]在本實施例的一些實現(xiàn)方式中,客戶端接收到確認消息后,將版本號小于或等于確認包版本號的所有修訂數(shù)據(jù)包的狀態(tài)設(shè)置為已經(jīng)發(fā)送給服務(wù)器端,服務(wù)器已經(jīng)合并,并且客戶端已經(jīng)合并的狀態(tài)。
[0054]請參考圖4,其示出了根據(jù)本申請的文檔協(xié)作編輯方法的又一個實施例的其他客戶端消息傳遞示意圖400。
[0055]本實施例所述的用于文檔協(xié)作編輯方法的流程圖400包括以下步驟:
[0056]步驟401,接收服務(wù)器發(fā)送的廣播消息,所述廣播消息包括帶編號的修訂信息。
[0057]在本實施例中,廣播的實現(xiàn)流程是,每個客戶端加入到一個文件的協(xié)作時,首先就會和服務(wù)器端建立連接,可以將其視為發(fā)送一個建立連接的初始化包。服務(wù)器端收到包含該客戶端信息的初始化包后,將該客戶端的ID加入到協(xié)作用戶的ID池子里。每次發(fā)送廣播消息的時候,去除ID池子里的所有用戶,給除了發(fā)送方ID之外的所有ID發(fā)送廣播數(shù)據(jù)包。
[0058]步驟402,將所述帶編號的修訂信息合并到文檔上。
[0059]在本實施例中,合并操作指代的是廣義的合并操作,可選的,包括了刪除、添加、覆蓋等操作。在通常情況下,用戶進行文檔修訂時所能產(chǎn)生的操作均屬于合并操作的類型。
[0060]請參閱圖5。為了更清楚地說明本申請的文檔協(xié)作編輯信息的傳輸過程,圖5示出了根據(jù)本申請的文檔協(xié)作編輯方法另一個實施例的消息更新流程圖500。本實施例所述的用于文檔協(xié)作編輯裝置的消息傳遞示意圖500包括:客戶端501,服務(wù)器502、客戶端503、客戶端504。
[0061]在本實施例中,實現(xiàn)實時協(xié)作時,在客戶端501新建一份文檔,編輯后進行一次差值操作,將得到的修訂數(shù)據(jù)包發(fā)送到服務(wù)器502,并進入到等待狀態(tài)。在本實施例的可選實現(xiàn)方式中,服務(wù)器502收到修訂數(shù)據(jù)包時,將其編號為O并將其合并到新建的文檔上,該編號嚴格遞增,并給客戶端501回復一個編號為O的確認信息,同時給所有正在協(xié)作編輯的其他客戶端503、504發(fā)送一條廣播消息,消息的內(nèi)容關(guān)于編號為O的修訂數(shù)據(jù)包。其他的所有客戶端503、504收到消息后就各自將編號為O的修訂數(shù)據(jù)包合并到已有的文檔上,從而完成一次協(xié)作編輯。
[0062]請參閱圖6,其示出了根據(jù)本申請的文檔協(xié)作編輯方法的又一個實施例的其他客戶端消息傳遞示意圖600。本實施例所述的用于文檔協(xié)作編輯裝置的消息傳遞示意圖600包括以下步驟:
[0063]步驟601,接收服務(wù)器發(fā)送的廣播消息,所述廣播消息包括帶編號的修訂信息。
[0064]在本實施例中,編輯文檔時,定義了三個狀態(tài),完成狀態(tài)(head)、等待狀態(tài)(pending)和工作狀態(tài)(work)。完成狀態(tài)指的是已經(jīng)發(fā)送給服務(wù)器端,服務(wù)器已經(jīng)合并,并且客戶端已經(jīng)合并的狀態(tài)。等待狀態(tài)指的是已經(jīng)發(fā)送給服務(wù)器,但是沒有反饋的情況。工作狀態(tài)指的是正在編輯還沒有發(fā)送給服務(wù)器的狀態(tài),而本算法的協(xié)作狀態(tài)就是在這三個狀態(tài)之間跳轉(zhuǎn)。
[0065]在本實施例的一些實現(xiàn)方式中,客戶端A按照一定的時間間隔或規(guī)律將本次修改所產(chǎn)生的內(nèi)容與本次修改前的內(nèi)容做一次數(shù)據(jù)交互格式差值運算,計算出本次修改所產(chǎn)生的差值內(nèi)容。客戶端將差值內(nèi)容附加文件信息和本次修改的用戶信息后組成數(shù)據(jù)包,稱之為修訂數(shù)據(jù)包,并將其發(fā)送給服務(wù)器。同時,客戶端A將發(fā)送出去的數(shù)據(jù)包內(nèi)容標記為等待狀態(tài)。
[0066]步驟602、服務(wù)器接收修訂數(shù)據(jù)包。步驟603、判斷是否為新建的文件。
[0067]步驟604、若判斷為是則服務(wù)器建立該文件,并將其版本號初始化;
[0068]在本實施例中,服務(wù)器在接收到修訂數(shù)據(jù)包后,若該數(shù)據(jù)包所附帶的文件為新建的文件,則服務(wù)器建立該文件,服務(wù)器的文件內(nèi)容即為發(fā)送過來的數(shù)據(jù)包內(nèi)的差值內(nèi)容,并將其版本號初始化。
[0069]步驟605、若判斷為否則通過與服務(wù)器之前的文件進行差值運算,更新文件信息,并將版本號遞增。
[0070]在本實施例中,服務(wù)器在接收到修訂數(shù)據(jù)包后,若數(shù)據(jù)包所附帶的文件信息為已存在的文件,則通過與服務(wù)器之前的文件進行數(shù)據(jù)交互格式差值運算,更新服務(wù)器的文件及相關(guān)信息。同時將該文件的版本號遞增。
[0071]步驟606,服務(wù)器將收到的修訂數(shù)據(jù)包和更新后的版本號組成的廣播數(shù)據(jù)包發(fā)送給客戶端B和客戶端C。
[0072]在本實施例中,服務(wù)器端除發(fā)送步驟608所述的確認包外,更新文件和文件信息后,將本次收到的修訂數(shù)據(jù)包和更新后的版本號組成廣播數(shù)據(jù)包發(fā)送給其他正在參與協(xié)作編輯的客戶端,例如客戶端B和客戶端C。
[0073]步驟607,客戶端B和C收到廣播數(shù)據(jù)包后合并版本號小于或等于廣播數(shù)據(jù)包版本號的廣播數(shù)據(jù)包,并將裝置的編輯狀態(tài)設(shè)置為完成狀態(tài)。
[0074]在本實施例中,當用戶發(fā)送出去一個修訂數(shù)據(jù)包后,收到廣播編號為3的修訂數(shù)據(jù)包,而過了一段時間后收到編號為4的反饋消息,說明已經(jīng)發(fā)送出去的修訂數(shù)據(jù)包在服務(wù)器端編號為4,那么該用戶要等待收到號碼比4小的且沒有合并的所