主要观点:介绍了基于 Web 的多用户虚拟操作系统 Butler 中集成操作转换(OT)以实现同时编辑文本文档的过程,包括初始实现的缺陷、如何使用 ot.hs 库、与 quill 编辑器的集成等,并展示了最终的架构和代码实现,最后总结了整个过程及后续展望。
关键信息:
- Butler 的文本编辑器 Noter 初始实现未考虑冲突,易导致不同步,如通过序列图展示的场景。
- OT 的核心思想是转换和组合操作以维护文档一致性,ot.hs 库提供相关 API 如 applyClient、applyOperation 等。
- 发现 quill 项目的文本更改事件适合 OT,尝试将其与 Haskell 集成但未成功,后使用 ot.js 实现。
- 最终架构为 Haskell 服务器通过 Servant WebSocket 与 JavaScript 客户端交互,客户端在浏览器中进行转换以同步本地文档状态。
重要细节: - 事件由行、列位置及插入或删除操作组成,并发编辑时不同行可正常工作,若有行插入或删除则易出错。
- ot.js 使用相同 API 易于集成,通过设置回调和 WebSocket 连接实现客户端与服务器的交互,quill 编辑器也相应配置。
- 完整实现可查看 Server.hs 模块,此版本独立且实现了用户选择功能。
结论:初始实现有缺陷,OT 可解决,Haskell 版本代码设计良好且有属性测试,Coq 中有形式化证明,目前集成工作良好,期待添加新功能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。