[产品技术] Operational Transformation

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

最近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)


原文发布于微信公众号 - 程序人生(programmer_life)

原文发表时间:2014-04-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏祝威廉

流式数据Pipeline质量控制浅谈

以我们公司的实时带宽计算为例,就是一个长长的Pipeline,中间经过的组件其实是很多的,比如解析模块,指标拼接模块,累加器模块等,这些模块可能是独立部署,也可...

1204
来自专栏情情说

我的常用工具集

今天年后第一天上班,去年会有公司高管在门口发红包,本来想早点去公司,但还是晚到20分钟,错失了我的大红包 :)。上午一直不在状态,可能是所谓的节后综合征,下午慢...

3159
来自专栏小白课代表

matlab 2017a

1423
来自专栏Django中文社区

在学习django-rest-framework时收集的学习资料推荐

由于我平时开发的 django 项目都比较小,所以一直以来都是使用 django 模板引擎渲染 html 页面这种比较原始的方式在开发。最近发起了一个 Djan...

9168
来自专栏软件成本造价评估

软件造价之:浅析快速功能点方法度量软件的规则及过程

快速功能点方法是一种软件规模度量方法。该方法适用于软件项目早期、中期、后期等各个阶段的规模估算或测量。   采用优化后的功能点方法——快速功能点方法进...

1270
来自专栏java一日一条

支撑 Java NIO 与 NodeJS 的底层技术

众所周知在近几个版本的Java中增加了一些对Java NIO、NIO2的支持,与此同时NodeJS技术栈中最为人称道的优势之一就是其高性能IO,那么我们今天要讨...

862
来自专栏向治洪

OtterTune来了,DBA怎么办

概述 最近几年,特别是随着云计算的发展,出现了行业向后重叠和推动的情况。数据库龙头企业Oracle最近几年重点转而向云的变革,它全力以赴在做的一件事情就是把所有...

2696
来自专栏Django中文社区

在学习django-rest-framework时收集的学习资料推荐

由于我平时开发的 django 项目都比较小,所以一直以来都是使用 django 模板引擎渲染 html 页面这种比较原始的方式在开发。最近发起了一个 Djan...

4146
来自专栏腾讯技术工程官方号的专栏

鹅厂上万节点大规模集群的跨城自动迁移(下)

当上百P的数据,上万个节点的集群进行跨城迁移时,如何在有限的带宽下实现自动、高效、稳定地迁移?本文将跟你一一揭晓!

5952
来自专栏祝威廉

(课程)基于HBase做Storm 实时计算指标存储

Hi,大家好!我是祝威廉,本来微博也想叫祝威廉的,可惜被人占了,于是改名叫·祝威廉二世。然后总感觉哪里不对。目前在乐视云数据部门里从事实时计算,数据平台、搜索和...

2113

扫码关注云+社区

领取腾讯云代金券