# 阅读源码(etherpad)
makeChangesetTracker -- 比较changeset
incorporateUserChanges -- 定时执行
doIncorpLineSplice --触发发送修改的消息
doRepApplyChangeset
if (changesetTracker.isTracking())
{
changesetTracker.composeUserChangeset(changes);
}
setChangeCallbackTimeout ---- 执行changeCallback -- setUserChangeNotificationCallback(handleUserChanges)对changeCallback 进行赋值
handleUserChanges/collab_client --- sendMessage 发送 change提交消息
# 参考文档
http://fex.baidu.com/blog/2014/04/realtime-collaboration/ (opens new window) http://www.codecommit.com/blog/java/understanding-and-applying-operational-transformation (opens new window) https://operational-transformation.github.io/ot-for-javascript.html (opens new window) http://objcer.com/2018/03/05/SharePen-Operational-Transformation/ (opens new window)