深入浅出 OpenSumi 协同编辑的原理
介绍
什么是协同
信息的传播方式有很多种,文字、语音、视频、图片符号等,传统的信息传播途径存在着成本和时效性问题,以信件举例,信息生产者需要将信件整理撰写完成然后通过邮递寄给信息消费者。
随着互联网发展带来的变革,使得以上这些传播方式的成本大大降低,然后又将时效性问题划分成了同步实时传播和异步非实时传播
- 同步实时传播: 视频会议、语音通话、消息聊天
- 异步非实时传播:文档、邮件、视频、代码
同步传播的场景下,信息的产生和传播往往不需要太深的思考,而是通过多方实时的交流和讨论逐步勾勒出话题的全貌,强时效性是思想碰撞的最重要因素。
异步传播的场景下就不强调时效性,比如当你看到这篇文章的时候其实我已经写完了(想起了影视剧里的经典台词)。在这个场景下,信息的表达更侧重准确性和丰富性,需要经过斟酌打磨才会将信息的产生传播给消费者,同时也能形成一种沉淀,再度成为信息传递的载体。
而在 IDE 里写代码就是一个非常典型的异步非实时传播场景,你需要思考文件夹名称命名、架构、设计模式、逻辑实现等等,最后再将代码通过 Git 同步到远程仓库给其他消费者消费。
受限于异步传播的方式,在多人开发的项目上可能会发生最终各自信息载体的碰撞(其实就是代码冲突了),信息的滞后性也会导致在 code review 这件事上,需要 resolve conversation 才能看到新的结果。
那么我们能不能在写代码这件事上引入同步实时协作的能力,让多方的信息产生者共同迭代代码,通过你来我往的反馈减少代码冲突的产生以及代码思维的碰撞呢,答: 能。
借助云的优势,Cloud IDE 天然的就具有代码实时协同编辑的土壤,在之前,我们的分享协作其实只是做到了代码上的 共享,你只能看到我磁盘上的代码内容结果,但却看不到我在编辑器上拼命敲打代码时的努力,是不具备传统意义上的协同的。同时,多方对文件的代码修改并没有好的算法机制来保证最终一致性,也就很容易造成冲突。
所以我们在 OpenSumi 2.21 版本当中基于 Yjs(CRDT 理念的前端最佳实践库) 实现了协同编辑模块,在代码 共享 的基础之上实现了 协同 的能力
市面上主流 IDE 的协同编辑
VS Code
通过 Live Share 插件实现多客户端的协同编辑,比如 Visual Studio 与 Visual Studio Code 协同,还能与 Visual Studio Code Web 协同。
除了能协同编辑代码还支持共享调试会话、终端等,以及视频聊天,功能是非常丰富的
![](/assets/blank.gif)
(图中是 VS 与 VS Code 协同)
IDEA
使用 Code With Me 来提供协同编辑的服务。
它不仅能支持协同编辑代码文件,还支持音视频通话、共享调试会话等,但它也并非所有 IDEA 的功能都能协作共享,比如被分享者就不允许使用 重构 相关的操作
OpenSumi 里的协同编辑
目前已经内置了协同模块,使用方式非常简单,只需要在前端和后端模块新增 collaboration module 即可,然后提供 CollaborationModuleContribution 来自定义 user id 和 name,具体使用方式可参考文档 协同编辑模块
在此再次感谢 @situ2001 对 OpenSumi 多人协同编辑模块的开源贡献:#1274
工作原理
先抛问题: 多人协同要解决的问题有什么?
问题一: 如何保证操作路径的正确性?
举个例子:
深入浅出 OpenSumi 协同编辑的原理相关推荐
- 手把手玩转协同编辑(1):AST (Address Space Transformation)地址空间转换算法 基本介绍...
写在前面的话 加入实验室已经有大半年的时间了,科研上一直没有取得什么重大突破.除去自身的实力问题之外,最大的问题恐怕就是对于自己或导师提出的一个问题往往不知道从何入手去研究,如何快速的了解相关工作的现 ...
- Yjs + quill:快速实现支持协同编辑的富文本编辑器
大家好,我是前端西瓜哥,这次来看看 Yjs 如何帮助我们实现协同编辑能力的. Y.js 是一个支持 协同编辑 的开源库.只要我们将自己的数据转换为 Y.js 提供的 Y.Array.Y.Map 类型, ...
- 因为某种原因阻止文本引擎初始化_文本文档的协同编辑实现
背景 atom 编辑器新增一个 teletype 的功能,可以实现多人在线编辑代码.效果看起来挺炫酷,想了解一下是怎么实现的,于是研究了一下. 抽象一下文本文档的协同编辑这个问题,就是同步多个设备之间 ...
- PingCode Wiki 多人实时协同编辑功能发布
PingCode Wiki 在发布之初,就是希望打造成一个面向组织的知识管理系统. 通过结构化沉淀高价值信息,形成组织完整的知识体系.通过便捷地分享和传播,轻松提升知识的流转效率,更好地成就组织和个人 ...
- Confluence 6 管理协同编辑
2019独角兽企业重金招聘Python工程师标准>>> 协同编辑能够让项目小组中的协同合作达到下一个高度.这个页面对相关协同编辑中的问题进行了讨论,能够提供给你所有希望了解的内容. ...
- 文档协同编辑帮助企业迎接大数据时代
在当今社会,数据暴涨让越来越多的企业在存储和管理数据时,开始关注云存储.而在我国,文档协同编辑是目前发展最迅猛的一种有效的企业网盘存储工具. 比起其他,文档协同编辑在便捷性上表现优异.当企业,特别是正 ...
- 多人编辑同一个md_多人协同编辑一份Word文档的正确姿势是这样的
职场中难免需要:与同事协同编辑一份文档,与领导协同编辑一份文档. 那么如何清晰不混乱地协同编辑呢? 如下图所示,相信不少人在协同编辑文档时都是这样做的,用红字和括号,写明自己想编辑的内容及要修改的点. ...
- Confluence 6 管理协同编辑 - 关于 Synchrony
协同编辑能够让项目小组中的协同合作达到下一个高度.这个页面对相关协同编辑中的问题进行了讨论,能够提供给你所有希望了解的内容. 进入 Collaborative editing 页面来获得项目小组是如何 ...
- Confluence 6 管理协同编辑 - 最大编辑者的限制
我们限制为最多 12 个用户可以同时对一个页面进行编辑.这个意味着当一个页面已经有 12 个用户正在编辑了,13 个用户是不能进入编辑界面的,直到 12 个用户中有一个用户已经离开了. 系统管理员可以 ...
最新文章
- CSS实现文本超过指定长度显示省略号
- figure文本框乱码 matlab_Matlab给系统自动生成的窗体Figure1改名称
- OA系统如何控制每个人的权限?
- 课后作业之字符串加密
- 机器学习线性回归学习心得_机器学习中的线性回归
- oracle中prad函数_024 SQL函数
- python os模块详细_python之os模块详解
- 聊聊人工智能训练师AIT(Artificial Intelligence Trainer)
- WPF中ListBox的样式设置
- 设计模式系列之九:职责链模式
- dubbo monitor mysql_dubbo-monitor监控台的部署
- 百度 李彦宏 2008年在北大毕业典礼的演讲稿
- vue结合elmentui实现前端分页
- Pluralistic Image Completion—多元图像补全—摘要翻译—测试教程(附源码)——CVPR 2019
- 渗透之——SQLMap参数说明
- 微信小程序实现城市搜索功能(付源码)
- 工程伦理第三章学习笔记2020最新
- 成功体验Katalon框架测试安卓APK(一)
- 追赶的腾讯云 | 深网
- 计算机网络怎么运行内存,电脑运行内存怎么扩大(教你使用虚拟内存来增加win7系统的运行内存)...