2

我希望使用 google 提供的 Diff-Match-Patch 算法作为 Google-Mobwrite 实时协作文本编辑器协议的一部分,以便在我的程序中嵌入实时协作文本编辑器。

无论如何,我想知道存储用户正在编辑的每个文档的“全局”副本的最有效方法到底是什么。我希望将每个文档存储在任何用户都不本地的服务器上,并且每次用户执行“操作”(删除插入粘贴剪切)时,计算他们的副本与服务器及其修补程序等之间的差异。 .. 如果你知道 Google mobwrite 协议,你可能明白我在说什么。

服务器文本文件应该存储为一个已更改的文件,还是作为长字符串存储在 sql 数据库中?我应该使用 websockets 与服务器通信吗?老实说,在这方面我是个业余爱好者,但通常学得很快。有没有人有我可以遵循的任何提示或资源?非常感谢

4

2 回答 2

1

这将是一个需要从头开始处理的大项目,因此我建议您使用该领域的众多开源项目之一。例如,etherPad:

https://code.google.com/p/etherpad/

于 2012-09-16T07:13:53.343 回答
0

Mobwrite 使用的是差分同步技术,它与操作转换技术完全不同。

差分同步假设有一个始终从客户端(浏览器)开始的通信圈,这意味着您不能使用 web-sockets 直接从服务器发送差异。浏览器需要经常请求服务器以获取更新(假设每 2 秒一次),否则您的卷影副本将不同步。

为了在用户处于活动状态时存储影子副本,您可以使用任何您想要的东西,但最好使用内存数据库(Redis),因为您需要快速访问来执行差异和补丁。当用户离开会话时,您不再需要他的副本。但是,如果你需要在你的应用程序中持久化,你应该只保留服务器副本而不是影子副本(影子副本用于找出差异),然后你可以使用 MySQL 或任何你喜欢的东西。

但是对于操作转换技术,有一些不错的库

节点JS

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

OpenCoweb (opencoweb.org):服务器是Java或Python,客户端是用Dojo构建的

于 2014-05-05T15:01:04.817 回答