27

すべてのユーザーがドキュメント内の他のユーザーのアクションを「すぐに」確認できる、Google Doc のライブ更新に非常に似たようなことをしたいと考えています。

これを達成するために、これまでの私のアイデア:

  • バックグラウンドで継続的に AJAX リクエストが実行されていますか (これはパフォーマンスに負荷がかかるように思われます)。
  • サーバーがすべてのクライアントに通知をプッシュし、それに応じて更新する方法はありませんか?
  • AJAXは、X秒ごとにバッファ/タイムラプスアクションを要求し、それらのX秒で実行されます(リアルタイム効果をシミュレートします)?

この効果を達成しようとしている他の人の経験を知りたい. これを行う最善の方法は何ですか?

すべての助けに感謝します。

注:リアルタイムのドキュメント編集ソリューションを特に探しているわけではありません。Google がドキュメントで行っていることと同じ概念に対する解決策を探しています。私は実際にそのソリューションを少し異なる方法で使用します。

4

11 に答える 11

13

私はロングポール戦略に投票します。各クライアントはサーバーへのリクエストを開きますが、サーバーは接続を切断することはなく、時々 Java スクリプトを送信するだけです。

絶え間ない AJAX リクエストはサーバーを停止させます。

于 2010-09-13T12:36:45.423 に答える
8

グーグルモブライトをチェックしてください。運用変換によるhtmlフォームの共同編集を可能にするドロップインライブラリです。

サーバーからプッシュバックされたイベントを取得するのは簡単です。それを行うには多くの方法があります。すべてのクライアントで状態が一貫していることを確認するのは難しい部分です。そこで、運用変換アルゴリズムの出番です。

于 2010-09-14T20:33:10.560 に答える
3

別の選択肢はOrbitedです:

Orbited は、ブラウザーに純粋な JavaScript/HTML ソケットを提供します。これは、Web アプリケーションを任意のバックエンド システムと統合できるようにする Web ルーターおよびファイアウォールです。プラグインに頼ることなく、ブラウザーに任意のネットワーク プロトコルを実装できます。

Orbited は、長期にわたるコメット接続用に最適化された HTTP デーモンです。新規および既存のアプリケーションと簡単に統合できるように設計されています。Orbited を使用すると、Flash や Java などの外部プラグインを使用せずに、チャット ルームやインスタント メッセージング クライアントなどのリアルタイム Web アプリケーションを作成できます。

于 2010-09-15T04:43:41.403 に答える
3

ユーザーが最新のブラウザーのみを使用している場合は、HTML 5 に付属する websocket 標準を試してみます。今後、より多くのブラウザーがこれをサポートし、Google や Apple などの企業がこれに取り組んでいます。入門チュートリアル: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

于 2010-09-16T14:18:45.970 に答える
3

Ajax アプローチはその 1 つの方法です。チャット アプリケーションのように実装できます。実際の方法は、表示されるデータによって異なります。要するに

  1. セッションを作成します。ドキュメント (例: Excel ファイル) を共有するユーザーを収容できます。
  2. ユーザー A が変更を行った場合 (セル A5 の更新など)、Ajax を使用して変更をサーバーに送信します。変更は、到着日または何らかのインデックス値とともに保存できます。
  3. バックグラウンド Ajax 呼び出しは、ページによって時々発生します。リクエストの一部として、アクセスの最終日も渡されます。
  4. リクエストを受け取ったら、前回またはインデックスから行われたすべての変更を提供するだけです。次のリクエストで使用できるように、レスポンスの一部として新しい日付またはインデックス値を含めることができます。
  5. 上位の X 要素にアクセスできないことが確実な場合は、それらを削除できます

パフォーマンスが集中するかどうかは、すべてをどのように構築するかに大きく依存します。

他のオプションは Web ソケットです。個人的には使用していませんが、ユーザーが使用するブラウザーを制御できる場合は、試してみることができます. サーバーがブラウザにデータをプッシュできるようにします。いくつかのリンク: Web ソケット JSおよび Firefox の Web ソケット

于 2010-09-12T22:25:57.460 に答える
2

リアルタイムの共同リッチ テキスト エディタをお探しの場合は、EtherPadがオープン ソース化されています。

于 2010-09-16T04:40:01.510 に答える
2

Web ソケットが広くサポートされていないために使用したくない場合は、Comet を参照してください。それがおそらくGoogle Docsのやり方です。

于 2010-09-12T22:32:43.477 に答える
1

pubsubhubbub もご覧ください - http://code.google.com/p/pubsubhubbub/ ビデオで短いイントロをご覧ください。

于 2010-09-19T08:39:01.923 に答える
1

ajax リクエストの数を制限する 1 つの方法は、それらの間隔を空けることです。毎秒リクエストする必要はありません。アクティビティの応答を受け取ったら、1 秒以内に別の要求を行います。アクティビティがない場合は、2 秒、次に 4 秒など、リクエスト間の間隔は最大 30 秒です。更新が発生したら、タイマーをリセットします。基本的には、GUIができるだけ応答性が高いように見えるように、スマートな方法でリクエストを配置します。

于 2010-09-12T22:39:10.210 に答える
1

Atmosphereのような Comet フレームワークを使用することをお勧めします。メッセージのトランスポート メカニズムが自動的に選択されますが、運が良ければ Websocket にすることもできます (ただし、これは抽象化されているため、心配する必要はありません)。とにかく、個々のリクエスト/レスポンス、および発生するすべてのエラー ソースとブラウザのバグに対処する必要がない場合、大きな価値があります。そこに行ったことがある。ドラゴンがいます。:-)

于 2010-09-17T20:29:46.930 に答える