协同编辑OT算法client端实现原理
OT算法解决协同编辑问题在在工程实践上客户端设计可以简化为三种状态和三个方法,如下图所示:
数据结构设计如下:
client {
version //记录当前版本
state //记录当前状态
}
//三种状态
Synchronized {
}
AwaitingConfirm {
hassendop //记录已经发送的op操作
}
AwaitingWithBuffer {
hassendop //记录已经发送的op操作
needsendop //记录需要发送的op操作
}
Synchronized状态:当前客户端已同步服务器状态 AwaitingConfirm状态:当前客户端向服务器发送了op操作命令,还没有收到确认消息 AwaitingWithBuffer:当前客户端向服务器发送了op操作,还没有收到确认消息,且客户端有进行了新的操作
每种状态下均有可执行三种操作applyclient、serverack、applyserver,下面分别说明每种状态下各种操作的具体含义
Synchronized状态 applyclient:向服务器发送op操作命令,并设置client状态为AwaitingConfirm serverack:无 applyserver:收到服务器op操作指令,执行服务器op操作指令,版本号加1
AwaitingConfirm状态 applyclient: 缓存客户端新的op操作命令,并设置client状态为AwaitingWithBuffer serverack: 设置客户端状态为Synchronized,版本号加1 applyserver: 客户端执行OT变换后的服务端op操作,对hassendop进行OT变换,状态保持不变,版本号加1
AwaitingWithBuffer状态 applyclient: 缓存合并客户端新的op操作指令,状态不变 serverack: 发送缓存的客户端新指令,设置状态为AwaitingConfirm,版本号加1 applyserver: 客户端执行OT变换后的服务端op操作,对hassendop进行OT变换,对needsendop进行OT变换,版本号加1