1

サーバーと GUI の間の状態を「リアルタイム」で同期するのに役立つライブラリを探しています。メッセージングとミドルウェア (プッシュ更新など) を並べ替えましたが、必要なのは、合理的に限られた期間内にデータが同期されていることを保証するプロトコルです。エラー/メッセージのドロップ/例外により、データが数秒間非同期になりますが、再同期するか、少なくとも数秒以内に同期が外れていることがわかります。

これは以前に解決されたもののようですが、適切なものが見つからないようです-どんな助けも大歓迎です

詳細 - JMS タイプのミドルウェアによって提供されるリッチ クライアント (Silverlight ですが、Javascript/C# または Java にすぐに移行する可能性が高い) GUI があります。次のようなデータ相互作用の一部を再設計しようとしています。

各ユーザーは、次のようないくつかのかなり小さなデータ セットに対して独自のビューを持っています。

  • 資格 (表示する GUI 要素)
  • GUI データ (例: ドロップダウン メニューを埋めるためなど)
  • ビジネス データのグリッド (注文のグリッドなど)
  • 設定 (GUI のレイアウトなど)

これらのデータセットはすべてサーバー上でいつでも変更でき、データはできるだけ早くクライアント上で更新する必要があります。データはサーバーを介して変更されます。クライアントが変更を要求すると (リクエストのキャンセルなど)、サーバーは資格とビジネス ルールに対してそれを検証し、内部データ セットを更新して変更を GUI に送り返します。ユーザーからのフィードバックを提供するために、暫定的な状態が GUI に設定される場合があります (送信されたキャンセルなど)。これは、サーバーの応答によって上書きされます。

現時点でのワークフローは次のとおりです。

  • ユーザー認証
  • GUI はサーバーから初期データ セットをダウンロードします (データベースまたはキャッシュされたその他のビジネス オブジェクトからデータ セットをロードします)。
  • GUI レンダリング
  • GUI はビジネス データのスナップショットをダウンロードします
  • GUI は、ビジネス データの更新をサブスクライブします
  • GUI で更新が行われると、モデルと画面上のビューが更新されます

これを改善する一般化されたライブラリを探しています

  • 効率的なペイロード形式 (Java バックエンド、C# フロントエンド、protobuf データ形式など) を使用してクロスランゲージにする必要があります。
  • トランスポートにとらわれない必要があります (現在は置き換えたくない JMS スタイルのミドルウェアを使用しています)
  • サーバー側のデータセットに変更が発生したときに、クライアントに更新を送信する必要があります
  • クライアントとサーバーは、変更をチェックして最新であることを確認できる必要があります。
  • 送信されるデータは最小限にする必要があります (最小デルタ)
  • クライアントとサーバーは、複数のリビジョンが同期していないことに対処する必要があります
  • クライアントは、セッション間でディスクにキャッシュし、ログイン時にデルタを取得できる必要があります。

理想的なソリューションは次のように使用されると思います

  • 任意のオブジェクト (またはオブジェクト ツリー) をライブラリ コードに登録できます (これは、Hibernate を介してロードされたデータ/オブジェクトで機能するはずです)。
  • オブジェクトが変更されると、ライブラリはリスナー/コールバックに変更デルタを通知します
  • リスナーは、JMS を使用してそのデルタをクライアントに送信します
  • クライアントは更新を取得し、オブジェクトのクライアント側バージョンを更新するライブラリのクライアント側バージョンにそれを返すことができます
  • クライアントは、実行する必要がある UI アクション (ユーザーへの通知、グリッドの更新など) を決定できるように、更新から十分な情報を取得する必要があります。
  • クライアントとサーバーは定期的に同じバージョンのオブジェクト上にあることを確認し (サーバーがバージョン番号をクライアントに送信するなど)、必要に応じて、サーバーがデルタを送信するか完全な更新を送信することで修正できます。

提案をありがとう

4

1 に答える 1

0

うわー、それはたくさんです!

フロントエンドのJavasciptでこれの同期の側面を扱うプロジェクトが進行中です。Node.JSで書いたテスト用のサーバーがあります(クライアントが落ち着いてしまえば実際は簡単でした)。

基本的に、データはキーごとにデータセットに保存され、個々のキーはすべてバージョン管理されます。サーバーにはすべてのデータのすべてのバージョンがあり、クライアントはサーバーから変更を受け取ることができます。クライアントとサーバーの両方で何かが変更された場合のバージョンの競合は、競合解決コールバックによって処理されます。

これは完全ではありません。実際のところ、現時点ではインメモリ ストアしかありませんが、新しい 1 週間程度で変更される予定です。

実際の通知/ダウンロードとアップロードはライブラリの範囲外ですが、これには Sockets.IO を使用できます。

現在、jQuery、Dojo、および NodeJS で動作しますが、依存関係はほとんどありません。

プロジェクト (デモ付き) はhttps://github.com/forbesmyester/SyncItにあります。

于 2013-06-02T20:29:57.937 に答える