適度なユーザー同時実行性を処理する必要のあるWebベースの生産性アプリケーションを構築しており、サーバーとクライアント間でデータの同期を維持するためのさまざまなオプションを検討してきました。アプリケーションデータはページの読み込み時にJavaScriptにブートストラップされ、WebSocketはデータをサーバーにプッシュするために使用されます。
少しコンテキストとして、私は現在Node.JSとSocket.IOを使用して、Djangoバックエンドへのプロキシとして機能する永続的なクライアントサーバーゲートウェイを作成しています。
課題は、接続されているすべてのクライアントを相互に同期させて、1つのクライアントセッションでのアプリケーションへの変更が、接続されているすべてのクライアントセッションにすぐに反映されるようにすることです。難しいのは、必ずしもすべてのユーザーがすべてのデータを表示できるわけではないということです。さまざまなユーザーレベルがあり、ユーザーごとにわずかに異なるデータセットの所有権を取得できます。
したがって、オブジェクトが何らかの方法で変更され、その変更がデータベースにコミットされる場合、現在接続しているユーザーのどのユーザーにデータを安全にプッシュできるかを知る必要があります。
私はこれに対するさまざまな解決策を模索してきましたが、これはpubsubメッセージングキューを介して処理できるもののように感じます-AMQPのようなものを使用しますが、アプリケーションの構造を理解するのに苦労しています。
私の頭の中では、アプリケーションの構造は次のようになります。
Client
<-> Node.JS gateway
<-> AMQP messaging queue
<->Django app
Node.jsインスタンスとDjangoインスタンスを単一のクライアントとして扱い、単一の直接交換を作成してから、Node.jsで結果をフィルタリングする必要がありますか?
または、この種のフィルタリングは、メッセージングシステムが処理できるものであり、たとえば、接続されている各クライアントが関連するトピックにサブスクライブし、表示が許可されているデータのみを受信しますか?
メッセージングシステムの使用経験がほとんどないため、アプリケーション内でどのような役割を果たせるかを頭に入れておくのに苦労しています。アドバイスをいただければ幸いです。