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

2016-12-16 22:21:13 +08:00
 phrack

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

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

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

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

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

Z:1>101+1$0

Z:2>1=101+1$1

Z:4>1=201+1$2

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

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

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

关键字:
Operational Transformation
协同编辑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/328185

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX