查看运营转型框架的所有示例,它们似乎都解决了对纯文本文档的更改转换问题。如何将OT框架用于更复杂的对象?
我想开发一个实时便签式应用程序,人们可以共同创建便利贴,改变他们的位置和文本值。假设位置值不会被转换,我是否正确? (我的意思是,他们怎么样,你不能合并他们?)。但是,我想使用OT框架来解决与posit的冲突 - 它的值,对吗?
答案 0 :(得分:1)
我认为使用Operational Transformation来处理复杂对象没有任何问题,你需要的是定义你的OT系统支持哪些操作以及如何为它们解决并发问题
例如,如果您从同一“客户端状态”的两个不同用户收到两个粘滞便笺“坐标移动操作”,则需要使这两个状态收敛,可能取消第二次操作。
当两个用户生成两个更新以删除完全重叠(或可能部分重叠)的文本范围时,这与文本完全相同,处理的第二个更新必须针对前一个进行转换,结果操作只会有效删除原始的一部分,(或完全取消'无操作')
您可以查看关于Google Wave Operational Transformation如何运作的this nice解释,并从这一点猜测它应如何运作您自己的实现
答案 1 :(得分:1)
如果你想沿着这条路走下去,请参阅下面的文章,了解如何使用树木加入OT:
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.100.74
但是,在您的特定情况下,我会为每个stickynote使用单独的纯文本OT文档,并使用现有的库,例如:etherPad,来完成繁重的工作。然后,票据的位置可以在最后的提交者赢得的基础上广播。
答案 2 :(得分:1)
操作转换是一种通用技术,适用于任何数据类型。关键是您需要定义转换函数。此外,还有一些原子属性无法自动合并,如(位置和背景颜色),这些属性主要是"最后更新获胜"或者用户在发生冲突时手动解决它们。
有一些很好的库和框架可以为已经存在的复杂数据提供OT: