介绍
什么是协同
信息的传播方式有很多种,文字、语音、视频、图片符号等,传统的信息传播途径存在着成本和时效性问题,以信件举例,信息生产者需要将信件整理撰写完成然后通过邮递寄给信息消费者。
随着互联网发展带来的变革,使得以上这些传播方式的成本大大降低,然后又将时效性问题划分成了同步实时传播和异步非实时传播
- 同步实时传播: 视频会议、语音通话、消息聊天
- 异步非实时传播:文档、邮件、视频、代码
同步传播的场景下,信息的产生和传播往往不需要太深的思考,而是通过多方实时的交流和讨论逐步勾勒出话题的全貌,强时效性是思想碰撞的最重要因素。
异步传播的场景下就不强调时效性,比如当你看到这篇文章的时候其实我已经写完了(想起了影视剧里的经典台词)。在这个场景下,信息的表达更侧重准确性和丰富性,需要经过斟酌打磨才会将信息的产生传播给消费者,同时也能形成一种沉淀,再度成为信息传递的载体。
而在 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 协同。
除了能协同编辑代码还支持共享调试会话、终端等,以及视频聊天,功能是非常丰富的
![](https://i-blog.csdnimg.cn/blog_migrate/26693c65b31e08f4e63663184aeb3eb4.gif)
(图中是 VS 与 VS Code 协同)
IDEA
使用 Code With Me 来提供协同编辑的服务。
它不仅能支持协同编辑代码文件,还支持音视频通话、共享调试会话等,但它也并非所有 IDEA 的功能都能协作共享,比如被分享者就不允许使用 重构 相关的操作
OpenSumi 里的协同编辑
目前已经内置了协同模块,使用方式非常简单,只需要在前端和后端模块新增 collaboration module 即可,然后提供 CollaborationModuleContribution 来自定义 user id 和 name,具体使用方式可参考文档 协同编辑模块