サーバー側では Spring 4 を使用しています。ブラウザ側では Ember.js を使用しています。
私のアプリケーションには、 や などのエンティティ クラスがPerson
ありProduct
ます。これらのエンティティは、サーバーとブラウザーの両方で使用されており、同じようにモデル化されています。例えば:
//this is on the server side
public interface Person {
String getId();
String getFirstName();
void setFirstName(String firstName);
String getLastName();
void setLastName(String lastName);
}
//this is on the browser side, modeled with Ember Data
App.Person = DS.Model.extend({
// id: DS.attr("string"), //property 'id' will be provided by Ember automatically
firstName: DS.attr("string"),
lastName: DS.attr("string")
});
サーバーとブラウザの間でエンティティの同期を維持する必要があります。したがって、たとえば、Person
のfirstName
プロパティがサーバー側で変更されると、この変更は関連するすべてのブラウザにリアルタイムでプッシュされます。
Spring の WebSocket サポートを調査し、 Spring の「Hello WebSocket」の例に慣れた後、このテクノロジーを使用することが私の要件に適したアプローチであると確信しました。
WebSocket/STOMP は非常に低レベルであるため、このテクノロジの上に構築され、ブラウザー (ここでのエンティティの役割はobserver ) とサーバー (エンティティの役割)の間でオブザーバー パターンのような動作を提供するソリューションを探しています。ここではsubject/observableになります)。
この「キープ・エンティティー・イン・シンク」の課題に対する既存の解決策を見つけることができなかったので (Spring 内の解決策でも、サード・パーティー・ライブラリーの解決策でもありません)、独自の解決策を構築したいと考えていますが、設計はすでに興味深い問題を提起しています。 、 そのような:
- プロトコルはどのように見えるべきですか? 変更が発生したら、サーバーはエンティティ タイプとその ID のみを含む最小限のフレームを送信する必要がありますか? (たとえば
Person
、ID "3" を持つ のプロパティが変更されると{"type": "Person", "id": "3"}
、関心のあるすべてのクライアントに送信されます) - サブスクライブできるエンティティの数に実際の制限はありますか? セッション中、1 つのブラウザが何百もの と接触することがあり
Product
ます。
Spring ベースのサーバーのエンティティと JavaScript クライアントのプロキシ エンティティ (必ずしも Ember.js である必要はありません) との同期を正常に維持することが証明されているソリューションを知りたいと思っています。