2012-01-30 70 views
2

爲了在我的程序中嵌入一個實時協作文本編輯器,我希望能夠使用Google提供的Diff-Match-Patch算法作爲Google-Mobwrite實時協作文本編輯器協議的一部分。什麼樣的服務器用於操作轉換操作?

無論如何,我想知道什麼是最有效的方式來存儲用戶正在編輯的每個文檔的「全局」副本。我希望將每個文檔存儲在不是任何用戶本地的服務器上,並且每次用戶執行「操作」(刪除插入粘貼剪切),以便差異計算在它們的副本和服務器及其修補程序之間等等。 ..如果你知道谷歌mobwrite協議,你可能明白我在說什麼。

應該將服務器文本文件存儲爲已更改的文件或存儲在sql數據庫中作爲長字符串還是什麼?我應該使用websockets與服務器通信嗎?說實話,我老實說是一個業餘愛好者,但我通常是一個快速學習者。有沒有人有任何提示或資源我可以遵循?非常感謝

回答

0

Mobwrite採用差同步技術及其從操作轉換技術完全不同。

差異同步假設有一個始終從客戶端(瀏覽器)開始的通信圈,這意味着您不能使用web-sockets直接從服務器發送差異。瀏覽器需要頻繁地請求服務器以獲取更新(可以說每2秒),否則您的影子副本將不同步。

爲了在用戶處於活動狀態時存儲影子副本,可以使用任何您想要的內容,但由於您需要快速訪問以執行差異和修補程序,因此最好使用內存數據庫(Redis)。而當用戶離開會話時,你不需要他的副本了。但是,如果你需要持久化你的應用程序,你應該只保留服務器副本而不是影子副本(影子副本用於找出差異),那麼你可以使用MySQL或任何你喜歡的。

但對於操作轉換技術也有一些不錯的庫在那裏

的NodeJS

  • ShareJS(sharejs.org):支持JSON的所有操作。
  • RacerJS:構建於ShareJS之上的同步模型
  • DerbyJS:使用RacerJS作爲其模型的完整框架。

OpenCoweb(opencoweb.org): 的服務器是Java或Python,客戶端是建立與道場