【问题标题】:What kind of server for operational transform operations?什么样的服务器用于操作转换操作?
【发布时间】:2012-02-21 22:10:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql real-time collaboration operational-transform


    【解决方案1】:

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

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

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

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

    NodeJS

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多