前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[产品技术] Operational Transformation

[产品技术] Operational Transformation

作者头像
tyrchen
发布2018-03-28 14:25:06
1.3K0
发布2018-03-28 14:25:06
举报
文章被收录于专栏:程序人生程序人生

昨天心情不太好,本来不打算写东西了,但想想坚持了这么久,还是写点什么吧。

最近sharejs升级到了0.7,看文档说整套代码重写了一遍,API基本都变了。想起以前写的teamspark,从meteor 0.3.7到0.5就经历了阵痛,0.5到0.6又是无法运行,费了不少劲才改好的艰难,开源软件没到1.0真是要慎用啊。

最近「业余」(真是非常业余,大块时间都用来写东西了)时间在捣鼓node-webkit。还记得之前我提到过的github atom么?它就是基于一个node-webkit的fork上做出来的。我想用node-webkit做一款兼具桌面优势和互联网特征的协作软件,所以自然想到了久未使用的sharejs。

sharejs是一款允许多人在线协同编辑的javascript库。想想google docs,你和你的小伙伴可以同时编辑一个文档,能看到对方的修改且互不影响。它背后的技术思想是operational transformation。今天简单讲讲OT。

支撑OT的算法比较复杂,但wikipedia的这幅图讲的比较清楚:

你可以把他想像成一个实时的git,有三个阶段:

1) 首先所有打开了使能OT(比如说加载并运行了sharejs的页面)的浏览器之间要能够随时通讯。这个可以通过websocket来实现。

2) operation:用户的输入会生成一个oepration(可以想像一下每输入一点文字就会执行一个"git commit; git push")。当有用户输入发生时,发起修改的浏览器将变化的内容(operation)提交给服务器,由服务器再广播给所有的浏览器。

3) transformation:任何停留在相同页面的浏览器会接收到服务器的消息,做类似于"git rebase"的事情。

OT的用法比较广,可以做在线协同编辑软件,比如说下一代的代码编辑器(说不定github atom以后会加入协同编辑的功能呢),极具互动的演示工具(想想你做在线演示时,其他人不但可以看到你实时的换页,还能在页面上批注提问),甚至游戏。

现在sharejs已经和各种javascript framework/lib有了不错的结合,比如说

1) meteor-sharejs:当meteor遇见sharejs(reactive plus OT)

2) ember-sharejs-coffee-starter:当ember遇见sharejs(data binding plus OT)

3) racer:当derby(和meteor类似的一个framework)遇见sharejs (还是reactive plus OT)


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档