1

プレイヤーのアカウント/状態がサーバーに同期されるゲーム/アプリケーションを実装しています。エンティティ(エンティティはユーザーのアカウント)のネストされたオブジェクトの変更を伝達する一般的なフレームワークを検討しています。計算/リフレクションの説明のために、クライアントとサーバーの両方がJavaで記述されていると仮定します(実際には、クライアントはプロパティを動的に変更できるActionscriptにあります)

たとえば、Firebaseを取り上げます。ルートオブジェクト(Firebaseオブジェクト)の任意のオブジェクトへの変更は、おそらく次のようなリクエストで伝播されます。

Service: PersistenceService
Action: modifiedObjects
Body:
Objects [{"/full/Path/To/Object/1","newValue"},{"/full/Path/to/Object/2","newValue"}]

あなたの入力に対する私の要求は次のとおりです。

1)オブジェクトのツリーへの変更を伝播するためのこの一般的なフレームワークの実装に関する以下の考えを修正および/または補強してください。

送信側では、すべてのオブジェクトが次のいずれかであるように見えます。

1)ルートエンティティからのフルパスを保存する必要があります

2)ネストされたすべてのオブジェクトのプロパティへの変更は、反射的に行う必要があります

また

同期を強制する必要があります。最後のリクエストからエンティティに保存されたオブジェクトツリーを、変更のために現在のオブジェクトツリーと比較します。

サーバー側では、オブジェクトのパスを分析して、1回のリクエストで複数回アクセスされるオブジェクトをキャッシュし、参照/検索コレクションによってツリーに複数回アクセスしないようにすることができます。

4

2 に答える 2

0

一般的に、オブザーバーパターンはあなたが持っている要件の種類に対する答えです(wikiから)

オブザーバーパターン(別名、依存関係、パブリッシュ/サブスクライブ)は、サブジェクトと呼ばれるオブジェクトがオブザーバーと呼ばれる依存関係のリストを維持し、通常は次のいずれかを呼び出すことによって状態の変化を自動的に通知するソフトウェアデザインパターンです。それらのメソッド。これは主に、分散イベント処理システムを実装するために使用されます。

クライアントサーバーに実装する必要があるため、wikiに示されている例は適用できません。これを確認することをお勧めします。

http://deepintojee.wordpress.com/2011/03/18/observer-pattern-applied-at-remote-level/

于 2012-04-13T12:54:19.507 に答える
0

私が思いついた答えは、実際には非常に明白であり、明らかにそれを行うための最良の方法です。答えは、テーブルのデータベースをミラーリングすることです。各オブジェクトにIDを割り当て、すべてのオブジェクトをArrayListに格納します(または、各オブジェクトにタイプに基づいて一意のIDを割り当て、オブジェクト自体をHashMapに格納するタイプのArrayListに格納します)。

インターフェイスをServiceObjectとServiceContainerと呼びます。

今、私が確認しなければならないのは、jsonとprotostuffがオブジェクトへの二重参照をシリアル化する方法だけです。それらは別個のオブジェクトとしてシリアル化されていますか?もしそうなら、私よりもネストされたServiceObjectは、ArrayList内のオブジェクトへの参照として逆シリアル化する必要があります。

于 2012-04-16T22:51:27.040 に答える