web-dev-qa-db-ja.com

運用変換ライブラリ?

複数のユーザー間でテキストをリアルタイムで同期できるライブラリを探しています(Googleドキュメントも同様)。

私は運用上の変革につまずきました。これは私のニーズに合っているようです。そうは言っても、OTの要点は理解していますが、OTの数学や実装は理解していません。

したがって、テキストエリアにフックして変換を生成し、それらの変換を別のクライアントに適用できるドラッグアンドドロップJavascriptライブラリがあるのだろうかと思っていましたか?

(私はEtherpadのソースを入手しましたが、そこから頭や尻尾を作ることはできません。EtherpadのOT実装を活用する方法を誰かが指摘できれば、それも素晴らしいでしょう!)

100
gamers2000

Google WaveのOT実装の一部はオープンソースである(そしてさらに多くの部分が来ている)と思う。

これがあなたが探しているものかどうかはわかりませんが、OTの代わりに Differential Synchronization

56
Jörg W Mittag

元Waveエンジニアの1人が、現在 ShareDB という名前のShareJSと呼ばれる共同編集アルゴリズムのCoffeescript実装をリリースしました。

42
hawkeye

私が見つけた解決策を要約します。

  • 業務変革:例.

    • Google Wave OT。このアプローチは、いわゆる木星アプローチに基づいています。
    • ShareJs。 Google Wave OTと同じOTアルゴリズムに基づきます。
    • Coweb-jsoe。 COTに基づく-p2pメッセージの伝播もサポートする非常に洗練されたOTアプローチ。
    • OpenCoweb。 OpenCoweb-jsoeを活用して、多くの同様の問題に対して本格的なフレームワークを提供します。
    • OT.jsは、ShareJの操作タイプに基づいています。
    • DriveSDK。多くのことを行うことができる非常に興味深いAPI-例えばグラフ上のコラボレーション。
    • SwellRTはApache Waveのフォークです。統合され、リッチテキストをサポートします。
  • 差分同期:

    • Neil FraserによるDiff-Match-Patch。
    • MobWriteはDiff-Match-Patchアルゴリズムを活用します。
  • [〜#〜] crdt [〜#〜] (複製可能な複製データ型):

    • 共有タイプの実装を可能にするさまざまなCRDTアルゴリズムがあります。一部のCRDTはP2Pメッセージ伝播で動作し、一部はクライアントサーバーモデルに依存しています
    • Yjs を使用すると、任意のデータ型(RichText、Array、Hash Maps、..拡張可能)を共有できます。オフラインサポートおよびP2P通信プロトコルのサポート(XMPP、Websockets、およびWebRTCのモジュールがあります)
    • SwarmJS オフラインサポート付きのクライアントサーバー共有データベース。 Reactとうまく機能します
    • Woot Woot CRDTの実装
    • [〜#〜] crdt [〜#〜] 別のCRDT実装
    • 自動マージ
26
dmonad

OTライブラリ:

HWIOS Websocketプロジェクト内で、ドキュメントの状態を同期するために両方(サーバー側のpy-infinote、クライアント側のjinfinote)のコンボをうまく使用しました。

6
Phrearch

Ot.jsライブラリ https://github.com/Operational-Transformation/ot.js は、マルチユーザーシナリオに役立つ場合があります。

5
Jarnal
4
Peter Parente

この問題に対するターンキーまたは「ドラッグアンドドロップ」ソリューションは、共有された可変状態を確実に同期する複雑さのため、実際には存在していませんでした。 dmonadの回答はまともなまとめであり、利用可能なソリューションのより最新の概要を投稿しました here

この質問は非常に古いものですが、 Convergence (免責事項:私は創業者です)は、データ同期だけでなく、共同UXの構築に役立つ他のAPIのホストを提供する最もターンキーなソリューションを提供します。 ここに例があります あなたが要求したものを正確に示す:複数のクライアント間でのテキストフィールドの同期。

それ以外の場合、 ShareDB は、多くの人々のニーズに合う素晴らしいオープンソースのソリューションです。

4
alalonde

Js client lib(Strophe.js)を使用すると、クライアントサイドOT lib(JSOTTEST)と一緒に無料のXMPPサーバー(Jabber.orgなど)を使用して完全なクライアントサーバーを構築できますシステム。

コードを修正する時間があるときに、デモクライアントサーバーチャットシステムのsrcを送信します。

2
user981836

Npmには、node.js用の素敵なotライブラリがいくつかあります。

  • https://npmjs.org/package/ot -組み込みのcodemirrorとace、およびクライアントとサーバーの実装用のアダプター
  • https://npmjs.org/package/changesets -ノードとブラウザで使用可能なプレーンotライブラリ。あなたは「チェンジセット」(本質的には差分)を構築することができ、それはあなたが周りに送り、お互いに対して変換し、ドキュメントに適用できる
2
guest

これらのJavascriptライブラリもチェックしてください。

2
Ryan D. Hatch

Cedanet でみんなと話すことができます。 Cedaはクローズドソースであり、Webサイトでは無料トライアルは利用できません。私はCedaの開発に携わっており、商用プロジェクトで引き続きCedaを使用しているので、この道を進むとフィードバック/アドバイスを提供できるかもしれません。

1
Daniel Paull

OTコントロール層を実装し、異なるOTタイプ( shareJSに準拠したすべてのタイプをサポートしています。shareJSに似ていますが、意見が少なく抽象的です。

https://github.com/marcelklehr/gulf

1
Marcel Klehr

オペレーショナルトランスフォーメーションとバージョニングを組み合わせたコラボレーションエディターを構築しています。そうすれば、オフラインとオンラインの両方のコラボレーションをサポートできます。昨日、オープンソーススタックの一部として、独自のOTライブラリをリリースしました。

http://interior.substance.io/modules/operator.html

また、バージョン管理用のライブラリも提供しました。

http://interior.substance.io/modules/chronicle.html

1
Michael

私は、etherpad.orgとetherpad liteが他のソリューションよりも優れていると思います。

1
gorn