深入浅出 OpenSumi 协同编辑的原理

本文深入探讨了 OpenSumi 的协同编辑功能,基于 Yjs 库实现,解决了多人协作中的一致性和冲突问题。介绍了 OT 算法与 CRDT 的理念及其区别,并阐述了 Yjs 的数据结构和冲突解决策略。目前 OpenSumi 的协同编辑仍有改进空间,未来可能与 AI 结合带来新玩法。
摘要由CSDN通过智能技术生成

介绍

什么是协同

信息的传播方式有很多种,文字、语音、视频、图片符号等,传统的信息传播途径存在着成本和时效性问题,以信件举例,信息生产者需要将信件整理撰写完成然后通过邮递寄给信息消费者。

随着互联网发展带来的变革,使得以上这些传播方式的成本大大降低,然后又将时效性问题划分成了同步实时传播和异步非实时传播

  • 同步实时传播: 视频会议、语音通话、消息聊天
  • 异步非实时传播:文档、邮件、视频、代码

同步传播的场景下,信息的产生和传播往往不需要太深的思考,而是通过多方实时的交流和讨论逐步勾勒出话题的全貌,强时效性是思想碰撞的最重要因素。

异步传播的场景下就不强调时效性,比如当你看到这篇文章的时候其实我已经写完了(想起了影视剧里的经典台词)。在这个场景下,信息的表达更侧重准确性和丰富性,需要经过斟酌打磨才会将信息的产生传播给消费者,同时也能形成一种沉淀,再度成为信息传递的载体。

而在 IDE 里写代码就是一个非常典型的异步非实时传播场景,你需要思考文件夹名称命名、架构、设计模式、逻辑实现等等,最后再将代码通过 Git 同步到远程仓库给其他消费者消费。

受限于异步传播的方式,在多人开发的项目上可能会发生最终各自信息载体的碰撞(其实就是代码冲突了),信息的滞后性也会导致在 code review 这件事上,需要 resolve conversation 才能看到新的结果。

那么我们能不能在写代码这件事上引入同步实时协作的能力,让多方的信息产生者共同迭代代码,通过你来我往的反馈减少代码冲突的产生以及代码思维的碰撞呢,答: 能。

借助云的优势,Cloud IDE 天然的就具有代码实时协同编辑的土壤,在之前,我们的分享协作其实只是做到了代码上的 共享你只能看到我磁盘上的代码内容结果,但却看不到我在编辑器上拼命敲打代码时的努力,是不具备传统意义上的协同的。同时,多方对文件的代码修改并没有好的算法机制来保证最终一致性,也就很容易造成冲突。

所以我们在 OpenSumi 2.21 版本当中基于 Yjs(CRDT 理念的前端最佳实践库) 实现了协同编辑模块,在代码 共享 的基础之上实现了 协同 的能力

市面上主流 IDE 的协同编辑

VS Code

通过 Live Share 插件实现多客户端的协同编辑,比如 Visual StudioVisual Studio Code 协同,还能与 Visual Studio Code Web 协同。

除了能协同编辑代码还支持共享调试会话、终端等,以及视频聊天,功能是非常丰富的

(图中是 VS 与 VS Code 协同)

IDEA

使用 Code With Me 来提供协同编辑的服务。

它不仅能支持协同编辑代码文件,还支持音视频通话、共享调试会话等,但它也并非所有 IDEA 的功能都能协作共享,比如被分享者就不允许使用 重构 相关的操作

OpenSumi 里的协同编辑

目前已经内置了协同模块,使用方式非常简单,只需要在前端和后端模块新增 collaboration module 即可,然后提供 CollaborationModuleContribution 来自定义 user id 和 name,具体使用方式可参考文档 协同编辑模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值