我希望使用Google提供的Diff-Match-Patch算法作为Google-Mobwrite实时协作文本编辑器协议的一部分,以便在我的程序中嵌入实时协作文本编辑器。
无论如何,我想知道存储用户正在编辑的每个文档的“全局”副本的最有效方法是什么。我希望将每个文档存储在不是任何用户本地的服务器上,并且每次用户执行“操作”(删除插入粘贴剪切)时,在他们的副本和服务器之间计算差异及其修补等。 ..如果你知道Google mobwrite协议,你可能会理解我在说什么。
服务器文本文件是应该存储为更改的文件还是作为长字符串存储在sql数据库中或者是什么?我应该使用websockets与服务器通信吗?说实话,老实说我是一个业余爱好者但通常是一个快速学习者。有没有人有我可能会遵循的任何提示或资源?非常感谢
答案 0 :(得分:1)
这将是一个从头开始解决的大项目,因此我建议您使用此领域的众多开源项目之一。例如,etherPad:
答案 1 :(得分:0)
Mobwrite正在使用差异同步技术,它与操作转换技术完全不同。
差异同步假设有一个始终从客户端(浏览器)启动的通信圈,这意味着您无法使用Web套接字直接从服务器发送差异。浏览器需要经常请求服务器获取更新(假设每2秒),否则您的卷影副本将不同步。
用于在用户处于活动状态时存储阴影副本,您可以使用您想要的任何内容,但最好使用内存数据库(Redis),因为您需要快速访问来执行差异和补丁。当用户离开会话时,您不再需要他的副本。但是,如果你需要持久性应用程序,你应该只保留服务器副本而不是影子副本(影子副本用于查找差异),然后你可以使用MySQL或任何你喜欢的。
但是对于操作转换技术,那里有一些不错的库
<强>的NodeJS 强>:
OpenCoweb (opencoweb.org): 服务器是Java或Python,客户端是使用Dojo构建的