首页 > 其他分享 >协同编辑功能实现原理概述

协同编辑功能实现原理概述

时间:2024-03-17 18:23:12浏览次数:28  
标签:changeset 协同 编辑 算法 概述 文档 原理 服务端 客户端

协同编辑是一种多用户同时在线编辑同一文档或项目的技术,允许多人实时或异步地对内容进行添加、删除和修改,但是不会互相覆盖各自的修改。这在文档编辑、软件开发等领域非常流行和有用,比如飞书文档、谷歌doc等。

协同编辑主要面临的技术问题包括:版本管理、冲突检测、合并冲突、实时同步、并发控制

协同编辑的主流算法主要包括:OT 算法(操作转换Operational Transformation)、CRDT 算法(冲突无关复制数据类型 Conflict-free Replicated Data Type)和DS 算法(差异同步算法Differential Synchronization )。

下面基于 OT 算法简单介绍一下协同编辑应用的实现原理。

一些概念

协同编辑,基于 socket 连接快速提交或者拉取数据。

用changeset 存储变更,多个变更应用在文档中就变成了新文档。

当A/B 两个变更都需要应用生效于文档中时,先应用的可以直接生效,后应用的需要基于先生效的变更做一些转换计算,得到一个可以直接应用于文档的A'或者B', XAB'或者XBA'就成了一个新文档。转换计算法的算法称之为follow算法。

对changeset集合进行 Compose 压缩整理,将changset数量减少,基于压缩后的changeset形成一个文档快照,减少文档被渲染时计算的次数

简单实现过程

客户端可以用三种类型的 changeset 来维护自身的状态,即 AXY

  • A:服务端最新版本,所有已提交到服务端到 changeset 的集合
  • X:所有客户端提交给服务器,但还未收到 ACK 的 changeset 的集合
  • Y:所有客户端产生了单还未提交给服务端到 changeset 的集合

客户端和服务端数据交互过程

  • 客户端将 X 和 A 版本提交到服务端后,使用 Y 来继续存储用户的变更,
  • 服务端使用 follow 算法处理产生冲突的 changeset 数据,并保存处理后的 changeset,向客户端发送 ACK,并告知处理成功后的 changeset 版本号,
  • 如果客户端有多个,服务端还需要向其他客户端广播这次提交的 changeset
  • 客户端将 AX 作为最新版本,Y 集合提交给服务端进行刚才一样的动作。

最简单的交互过程,单个客户端

多个客户端

标签:changeset,协同,编辑,算法,概述,文档,原理,服务端,客户端
From: https://www.cnblogs.com/hi3254014978/p/18078921

相关文章

  • 【网络原理】TCP三次握手四次挥手
    文章目录......
  • 【网络原理】TCP协议详细解析
    文章目录......
  • 学习JavaEE的日子 Day27 手撕HashMap底层原理
    Day271.手撕HashMap底层原理(重点)publicclassTest01{ publicstaticvoidmain(String[]args){ // Floatfloat1=newFloat("0.0f");// Floatfloat2=newFloat("0.0f");// Floatresult=float1/float2;// System.out.println(result);/......
  • 推荐系统冷启动问题概述
    冷启动问题简介冷启动问题分三类用户冷启动:如何给新用户做个性化推荐的问题物品冷启动:如何将新的物品推荐给可能对他感兴趣的用户系统冷启动:如何在一个新开发的网站上设计个性化推荐服务提供非个性化的推荐利用用户注册提供的年龄性别利用用户注册时提供的年龄,性别等个......
  • (容斥原理例题)洛谷P1287 盒子与球
    题目链接点击此处前往题目思路标题就不难知道,这是一道关于容斥原理的题目只需要简单一想就不难发现,这道题很可能会有很多重复的情况,就比如说我原来想的一个思路,先找出r个球来铺满第一层,然后再排列剩下的小球,这就会有很多重复的情况,比如说第一层的去了第二层,但是只是上......
  • TL431原理及使用
    TL431内部组成:运放+三极管    器件常见原理图: TL431可控精密稳压源与线性稳压器的区别线性稳压器可以接入大电流,而TL431一般不能超过100mA 参考链接:https://blog.csdn.net/weixin_61325357/article/details/127542270 ......
  • C++ STL第三篇(搞清楚deque原理和有多少用法)
    dequeVector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。Deque容器和vector容器最大的差异,一在于deque允许......
  • “傻瓜”学计量——主成分分析法PCA(原理+实操)
    提纲:1.PCA原理2.视频推荐:PCA原理   spass操作    stata操作+matlab实操1.背景在一些领域中,需要对大量数据进行观测。但是可能会带来变量之间具有相关性、分别对每个指标分析带来的偏误,等问题。因此,要寻找一个合理的方法,在减少需要分析的直白哦的同时,尽量减少......
  • Locust 运行原理分析
    从脚本中可以看出,脚本主要包含两个类,一个是`UserLocust`(继承自`HttpLocust`,而`HttpLocust`继承自`Locust`),另一个是`UserCollects`(继承自`TaskSet`)。事实上,在`Locust`的测试脚本中,所有业务测试场景都是在`Locust`和`TaskSet`两个类的继承子类中进行描述的。那如何理解......
  • 深度解析Sora视频生成原理
    在当今数字时代,视频内容已经成为人们生活中不可或缺的一部分。Sora视频生成技术的出现,为视频内容的创作和生产带来了全新的可能性。Sora是一种基于人工智能的视频生成技术,它能够以惊人的速度和精度生成高质量的视频内容,为视频制作人员提供了强大的工具。本文将深度解析Sora视频生......