项目描述
翻译我们需要一个开发者创建一个嵌入在我们网页应用中的文档编辑器,支持实时协作编辑。这个任务听起来简单,但做对了并不容易:两个人、五个人或二十个人应该同时打开同一个文档并并行编辑,绝不能覆盖彼此的编辑。当一个人输入一个短语时,其他人必须在几分之一秒内看到它逐字出现,并且每个参与者的光标位置必须保持正确,即使他们周围的文本不断变化。我们希望有实时光标和选择,按用户着色的光标,显示当前在文档中的人员列表的在线状态面板,以及一个嵌入评论的层,您可以在其中突出显示一个片段,留下备注并关闭讨论线程。
内部合并必须无冲突,因此我们期望基于 CRDT 或操作转换的引擎,而不是天真的“最后写入胜出”方案。来自不同客户端的同时编辑必须在每台机器上收敛到完全相同的最终状态,无论数据包传递顺序和网络延迟如何。离线工作对我们很重要:失去连接的用户应该能够继续本地编辑,他们的更改在连接恢复时应自动和解,无需合并对话框且不丢失输入的字符。我们还需要完整的版本历史,带有命名快照、可视化编辑记录,以及恢复或比较任何先前修订的能力。
传输应基于 WebSocket,具有自动重连和背压处理,整个系统必须能够在多个文档和多个并发编辑者之间扩展,以便服务器不会成为瓶颈。我们要求您将此视为生产工作:我们关心干净的 API、围绕合并逻辑的测试和清晰的文档,以便我们的团队能够在未来维护该项目。
— 每个用户的实时光标、选择和在线状态指示器
— 具有收敛保证的 CRDT/OT 合并引擎
— 离线编辑,重连时自动和解
— 嵌入评论、讨论线程和完整版本历史
内部合并必须无冲突,因此我们期望基于 CRDT 或操作转换的引擎,而不是天真的“最后写入胜出”方案。来自不同客户端的同时编辑必须在每台机器上收敛到完全相同的最终状态,无论数据包传递顺序和网络延迟如何。离线工作对我们很重要:失去连接的用户应该能够继续本地编辑,他们的更改在连接恢复时应自动和解,无需合并对话框且不丢失输入的字符。我们还需要完整的版本历史,带有命名快照、可视化编辑记录,以及恢复或比较任何先前修订的能力。
传输应基于 WebSocket,具有自动重连和背压处理,整个系统必须能够在多个文档和多个并发编辑者之间扩展,以便服务器不会成为瓶颈。我们要求您将此视为生产工作:我们关心干净的 API、围绕合并逻辑的测试和清晰的文档,以便我们的团队能够在未来维护该项目。
— 每个用户的实时光标、选择和在线状态指示器
— 具有收敛保证的 CRDT/OT 合并引擎
— 离线编辑,重连时自动和解
— 嵌入评论、讨论线程和完整版本历史
网页编程 现金, 银行转账