弑君者

V1

2022/04/14阅读:29主题:默认主题

实现多人协同编辑的思考

多人在线协同编辑

如果是你,如何设计

  1. 采用web端和服务端模式
  2. 用户A编辑数据,发送服务端,服务端推送给用户B,如果发生冲突,服务端则回退,同时用户A也回退,如果没有冲突,则用户B同时更新。

多人协同的核心难点就是如何处理冲突?

  1. 可以采用锁的形势,当用户A编辑的时候,锁住该区域,当编辑完,并且更新完成后,才允许用户B编辑,采用同步的方式。

  2. 如果不采用锁的方式,那么就会出现几种情况

    2.1 用户A编辑一个区域,用户B编辑另外一个区域,此时没有任何问题,同时在用户A和用户B更新两个区域就可以了

    2.2 用户A编辑一个区域,用户B编辑同一个区域,看下服务端收到两个请求后,把冲突发送给用户,让用户自己解决。

在线

多人在线就意味着在网络上,涉及到web端和服务端,需要及时把web端的数据同步到服务端,服务端数据及时同步到web端。

多人协同

多人协同就意味着多人可以同时编辑一份文档,就会发生冲突,则需要一种机制进行处理冲突的情况

常见的解决办法有几种

编辑锁

顾名思义就是当用户A编辑一个区域的时候,其它用户不能再编辑该区域,只有当用户A编辑完成之后,其它用户才能编辑。

缺点就是体验不好,如果用户一直修改,其它用户可能会一直等待。

OT(Operational Transformation)

这个技术说白了就是把A用户一段时间内的操作,转换成单独的几个命令,把用户B一段时间内的操作,转换成单独的几个命令,然后在A形成的几个命令和B形成的几个命令之间按照一定的规则,形成新的一套命令,按照新形成的一套命令,最后确定文档的内容

分类:

前端

标签:

前端

作者介绍

弑君者
V1