自己技术和时间有限,稍微看了下石墨文档的更新网络请求。
只检查了下 web 的网络。是在打开文档所在页面的时候创建了 websocket ,每个记录下来的动作都被实时发送到服务器,如果此时有另外的人在查看或者编辑此文档,这个动作会被下发到该客户端并更新文档。
每个动作包含了该次修改的一个 uuid ,修改时间,文档内修改的地址(行数,列数?), 修改的内容。
其中最让我好奇,也不懂的地方是标记修改的地方的表示方法。
比如在第一行连续缓慢输入 012 ,这个 websocket 连接会有三个 frame 发到服务器,其中标示修改位置和内容的为:
Z:1>101+1$0
Z:2>1=101+1$1
Z:4>1=201+1$2
非常有趣的标记,似乎最后是修改的内容,前面是修改的位置,不过这个仅仅只是简单的测试,还有很多其他复杂操作的标记更复杂,这个标记方式,到底是怎么解析的~ :)
石墨文档的程序员们自己创造的还是有什么标准的方式吗? 我好奇心实在重。
1
penjianfeng 2016-12-16 22:40:59 +08:00
约定的标准,指令集
|
2
phrack OP @penjianfeng 是类似 diff 这样的有公开的标准的设计还是石墨文档他们自己设计的一套标准呢?
|
3
virusdefender 2016-12-17 10:26:53 +08:00
最近他们刚发了篇文章 https://zhuanlan.zhihu.com/p/24102444
|
4
lt0136 2018-04-13 15:38:41 +08:00
最近在做毕设。。正好做到这个相关的,Operational Transformation 算法了解一下。Google Doc 也是用的这个
基本算法就是这个,然后在这个算法的基础上做定制。算法原理的一个可视化过程: https://operational-transformation.github.io/visualization.html 关键字: Operational Transformation 协同编辑 |