GAE ベースのアプリにログインしているクライアントをログに記録し、情報を待っています (違いがある場合は GWT アプリ)。REST データを受信してデータストアに保存するサーブレットもあります。情報は特定のクライアントに宛てられます。私の目標は、受信サーブレットからユーザー セッションのサーブレットに通知を渡すことです。私のデータ転送の制限時間は 60 秒、1 日あたり 1,000 ユーザー、1 回のブラウザ セッションで 1 時間、セッションあたり 5 回の通知です。
次のシナリオを検討しました。
ユーザー クライアントは 60 秒ごとにデータを要求し、データストアにクエリを実行して新しいデータを取得します。
このアプローチは単純に悪いものです。データストアの電力を大量に浪費し (1 日あたり 1000*60*n のデータストア読み取り操作)、プロセッサ時間と大きなメモリ フットプリントを大量に消費します。
通知を渡すための memcache の使用
受信者は通知を memcache に入れ、クライアントはそれをチェックし、成功した場合はデータストアを読み取ります。1 つの例外を除いて、すべて問題ありません。ドキュメントには「memcache は信頼できない」と記載されているため、memcache に何もない場合は、データストアも確認する必要があります。その結果、メモリ/プロセッサのフットプリントが大きくなり、より複雑なソリューションが得られます。
キュー
ほぼ良い解決策 - メッセージをパイプに入れ、反対側で読むだけです。この特定のケースでは、クォータをはるかに超える 1 日 1,000 のキューを作成するか、ドキュメントに「実験的であり、将来変更される可能性があるなど」と記載されている場合、キューでタグを使用する必要があります。アプリケーションの重要な部分として「実験的」サービスを使用することは、私を満足させません。
チャネル
少しトリッキーな解決策。ブラウザーは接続時にチャネルを開き、受信データで受信サーブレットは通知をチャネルに入れるだけで、通知された Web クライアントはデータストアからデータを更新するために独自のサーブレットを呼び出します。このアプローチで私が嫌いなのは、通信回線です。Web クライアントを介したサーブレット間の通知は、おそらく最善の方法ではありません。
GAE クラウドで、あるサーブレットから別のサーブレットに通知を渡すためのより良いアイデアはありますか?