这是WordPress第三阶段计划:实时协作大纲的第一次扩展。我们将研究实时协作并定义一些项目要求。
WordPress实时协作介绍
WordPress核心实时协作的主要目标是将功能构建到块编辑器中,以便并行协作、共享编辑和同行在线协作成为可能。不过,支持这些工作流程不仅仅涉及并发性,还涉及解除 WordPress 中长期以来存在的限制,例如当两个人尝试同时编辑时的锁定帖子。支持此功能的技术层有多种,因此让我们快速回顾一下它们是什么以及开始时需要考虑的内容。
首先,这些功能应该可供尽可能广泛的受众使用。这意味着使用不依赖于复杂服务器设置的技术,这些服务器设置会限制人们在 WordPress 网站内协作的能力,无论托管基础设施如何。这可能使我们走上在WebRTC等开放网络标准之上构建的道路,我们可以确保部署这些功能,而不会给后端带来任何特殊负担。WordPress 本身可以提供一个易于扩展的信号服务器(可能通过 REST 端点)用于身份验证握手。
然而,我们还希望确保系统足够灵活,能够扩展其他服务器实现来满足更高级的需求(例如 WebSockets 服务),以便超出点对点并发浏览器连接的当前限制,或者在以下情况下进行扩展:无法建立对等连接。这自然是插件领域。
在对等共享设置之外,我们还需要建立冲突解决的原语,这些原语将能够通过我们的块数据结构进行推理并随着时间的推移编排编辑。为此,Yjs很可能会派上用场,这是一个令人惊叹的开源库,它实现了作为共享类型呈现的无冲突复制数据类型(又名CRDT)。该库已经在古腾堡存储库和相关项目过去的大部分探索中取得了良好的成功。该库的作者还直接参与了其中一些迭代,并提出了建议和反馈。虽然它在块数据方面工作得很好,但它尚未与多实体文档配对。此外,正在进行的 SQLite 探索可能会发现其他想法和机会,以实现更广泛的离线优先体验,其中 CRDT 需要在不同的抽象层进行处理。
WordPress实时协作范围
这是我们需要研究的广泛任务的摘要:
- 回顾当前所有的探索、教训和权衡。
- 概述通过块编辑器提供程序封装协作功能所需的一组钩子,例如跨浏览器共享编辑和对等状态。
- 确保功能构建在区块API之上,以便区块作者无需对其区块进行修改即可在协作环境中工作。
- 设计并表示界面中连接对等点的“存在”。将选择状态与界面的其他有用部分集成,例如阻止列表侧边栏。
- 解除并发编辑限制。现在 WordPress 会将帖子锁定给正在编辑该帖子的当前用户。另一个用户可以接管,但不允许两个用户同时处理同一个帖子。
- 查看撤消/重做堆栈和解决方案。这里可能需要进行一些修改。
- 如果采用 CRDT,请确保其设计能够处理多实体文档,这是第二阶段比第一阶段更新的要求。
- 采用跨块类型工作的对等插入符和选择原语并设计其语义和视觉表示。
- 考虑离线协作在编排编辑和事务方面的一流用例。
- 探索在用户处理文档时“关注用户”的可能性。
- 定义身份验证和消息传递语义。例如,WebRTC 握手与向后端发出普通HTTP REST API请求的特征。提供对等连接上的只读会话以及无法建立对等连接的情况等问题的答案。
- 将 WebRTC 实现构造为可交换的适配器。该架构应该是可插拔的,以便扩展器可以提供其他解决方案。
- 概述错误场景以及与离线优先功能的功能重叠。例如,对等方在仍在进行编辑时失去连接。如果您作为单个用户在不同设备上进行编辑,我们希望将其用于相同用户分辨率。处理保存和修订分配。