[產品技術] 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)。每天一篇原汁原味的文章,早8點與您相會。
想感受下OT?戳這個鏈接吧 sharejs wiki
推薦閱讀:
※被虐,並快樂著
※行者無疆:西雅圖,波特蘭及其它
※談談FRP和Observable(二)
※談談管理
※談談編程
TAG:迷思 | sharejswiki |