問題タブ [operational-transform]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
real-time - Google ドキュメントの運用上の変革が削除の側でエラーになるのはなぜですか?
今日、この実験を試してみました。Google ドキュメント用に 2 つのオフライン エディターを開きました。1 つは、最初の単語を太字にしました。2番目に、私はそれを削除しました。どのクライアントを最初にオンにしても、単語は常に削除されてしまいます。
まず、なぜこのようなことが起こるのでしょうか。運用上の変革についての私の理解では、順序付けが重要であるということですか? 2 人がそれぞれ「a」と「b」を入力する単純な例では、サーバーが最初に「a」を受信すると、2 番目の人の「b」イベントを「pass one space」に変換して「ab」の出力を強制します。 、次に b" イベントを追加し、その逆も同様です。
第 2 に、順序が重要でない場合、Google ドキュメントが削除の側でエラーを選択した理由について、技術的な理由はありますか? それとも、その理由は主にユーザーにとって単純なのですか?
real-time - リアルタイムのコラボレーションに運用の変革が必要なのはなぜですか?
Google Docs のようなアプリや、ShareJSやEtherPad Liteのようなライブラリを見てきて、私はリアルタイムのコラボレーションに非常に興奮しています。これは、Operational Transformation として知られる非常に複雑な手法を使用して実装されているようです。
私の質問はおそらくやや奇妙です: なぜ OT が必要なのですか?
つまり、ほとんどの設定で Web のレイテンシが非常に低いということです。Google Docs、ShareJS、EtherPad などのツールを使用すると、変更は接続されたクライアントにほぼ瞬時に反映されます。
競合を解決し、サーバー側で同期を維持するための非常に複雑なソリューションはなぜですか?
コマンドパターンと元に戻す/やり直しに精通しているので、ドキュメントへのすべての変更を、同等の元に戻すコマンドを使用したコマンドとして単純に実装することが、はるかに簡単な解決策のように思えます。
クライアントが変更を加えたときにシリアル化されたコマンドを送信できるようにします。受信したすべてのコマンドにサーバー側でシリアル番号を割り当てます。ドキュメントに適用されたすべてのコマンドをクライアントに配布し、コマンドの履歴も保持します。
接続された各クライアントは、ドキュメントに適用されたすべてのコマンドをサーバーから受信します。これには、「正しい」順序、たとえばコマンドがサーバーによって受信され、マスター ドキュメントに適用された順序を示すシリアル番号が付けられます。サーバーによって保持されます。
クライアントがコマンド番号 100 であった場合、番号 102 として返される新しいコマンドをサーバーに送信すると、クライアントはコマンドを見逃したことを認識します。次に、送信した最後のコマンドに対して「元に戻す」コマンドを適用するだけです。コマンド番号 101 を適用し、それ自体のコマンド番号 102 を再度適用して、順序を元に戻します。
いくつかのコマンドが遅れている場合は、必要なだけロールバックしてから、見逃したすべてのコマンドを適用するなどします。
それは私にはずっと簡単に聞こえます。
それよりも運用の変革が優れている点は何ですか?
operational-transform - ShareJS の例が機能しない
Sharejs を使用して共同テキスト エディターを作成しようとしていますが、最初はいくつかの問題に直面しています。
私は「はじめに」ページから始めました。をnpm install share
使用してサンプルサーバーを実行してから実行し./node_modules/share/bin/exampleserver
ました。これはうまくいきます。
ただし、「サーバーの実行」セクションの手順に従って、独自の小さなアプリケーションを作成してみました。app.js ファイルと推奨される html を作成しました。これを実行しようとすると、ブラウザ コンソールに socket.io.js が見つからないという 404 エラーが表示されます。
そして、このエラーが繰り返し発生します:
これを引き起こしている提案やアイデアはありますか? 前に述べたように、事前構成された例はローカルでうまく機能するため、それが機能することはわかっていますが、新しいアプリを作成しようとしているときに何かを正しく構成してはいけません.
ありがとう。
clojure - Clojure Pedestal フレームワークのアーキテクチャ モデルは、Google Wave に似た運用上の変換ですか?
Pedestalのプレゼンテーションを読む(およびサンプル ソース コードを読む) - 変換と操作に基づくモデルが表示されます。
Pedestalが、 Google Waveで使用されたものと同様の運用上の変換 (こことここを参照) を使用するというのは本当ですか?
javascript - 運用変換ライブラリと Meteor の統合
Meteor でアプリを構築したとき、その機能には本当に驚かされました。ただし、Etherpad スタイルの共同編集ビットをアプリにドロップできるようになれば、本当に最高の目標です。
これを行う方法を調べているときに、meteor で OT ライブラリを使用していると思われるプロジェクトをいくつか見つけました。
ot.jsを使用するプロジェクト:
ShareJSを使用するプロジェクト:
これらのプロジェクトが Meteor とどのように統合されているかはわかりません。彼らは実際に Meteor Collections を使用していますか? Meteor をホストしているノード サーバーを使用し、OT を別のコンポーネントとして実行し、Meteor をまったく使用しないのでしょうか? Meteor との統合に優れた別の OT ライブラリはありますか?
これらのプロジェクトに詳しい方、または Meteor アプリの一部として OT を実装したことがある方は、これにアプローチする最善の方法についてご意見をお聞かせください。
(これはMeteor.js の運用変換の複製ではありませんか?その質問はほぼ 1 年前のものであり、Meteor はそれ以来長い道のりを歩んできました。)
javascript - contenteditable 要素で sharejs を使用する
HTML-Content のような contenteditable-Elements とsharejsを一緒に使用する方法はありますか?<div contenteditable="true">Content <b>with html</b></div>
または、HTML コンテンツまたはリッチテキストと組み合わせた運用変換 (OT) の他のベスト プラクティスはありますか? これはnode.jsでどのように行うことができますか?