V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
phrack
V2EX  ›  程序员

石墨文档 文本文档实时更新实现原理?

  •  
  •   phrack · 2016-12-16 22:21:13 +08:00 · 8893 次点击
    这是一个创建于 2931 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自己技术和时间有限,稍微看了下石墨文档的更新网络请求。

    只检查了下 web 的网络。是在打开文档所在页面的时候创建了 websocket ,每个记录下来的动作都被实时发送到服务器,如果此时有另外的人在查看或者编辑此文档,这个动作会被下发到该客户端并更新文档。

    每个动作包含了该次修改的一个 uuid ,修改时间,文档内修改的地址(行数,列数?), 修改的内容。

    其中最让我好奇,也不懂的地方是标记修改的地方的表示方法。

    比如在第一行连续缓慢输入 012 ,这个 websocket 连接会有三个 frame 发到服务器,其中标示修改位置和内容的为:

    Z:1>101+1$0

    Z:2>1=101+1$1

    Z:4>1=201+1$2

    非常有趣的标记,似乎最后是修改的内容,前面是修改的位置,不过这个仅仅只是简单的测试,还有很多其他复杂操作的标记更复杂,这个标记方式,到底是怎么解析的~ :)

    石墨文档的程序员们自己创造的还是有什么标准的方式吗? 我好奇心实在重。

    4 条回复    2018-04-13 15:38:41 +08:00
    penjianfeng
        1
    penjianfeng  
       2016-12-16 22:40:59 +08:00
    约定的标准,指令集
    phrack
        2
    phrack  
    OP
       2016-12-17 08:51:01 +08:00
    @penjianfeng 是类似 diff 这样的有公开的标准的设计还是石墨文档他们自己设计的一套标准呢?
    virusdefender
        3
    virusdefender  
       2016-12-17 10:26:53 +08:00
    最近他们刚发了篇文章 https://zhuanlan.zhihu.com/p/24102444
    lt0136
        4
    lt0136  
       2018-04-13 15:38:41 +08:00
    最近在做毕设。。正好做到这个相关的,Operational Transformation 算法了解一下。Google Doc 也是用的这个
    基本算法就是这个,然后在这个算法的基础上做定制。算法原理的一个可视化过程: https://operational-transformation.github.io/visualization.html

    关键字:
    Operational Transformation
    协同编辑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1166 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:24 · PVG 02:24 · LAX 10:24 · JFK 13:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.