2

Channel API を使用して複数のクライアントが App Engine に接続されているとします。各クライアントはメッセージを送信します。メッセージは、いくつかのルールに従って、接続されている他のクライアントに伝播する必要があります。注意が必要なのは、クライアントが同じ App Engine インスタンスに接続されていない可能性があることです。

あるインスタンスから他のインスタンスにデータをプッシュする方法はありますか?

(はい、Memcache については知っていますが、これには何らかのポーリングが必要です。)

4

3 に答える 3

3

ここで 2 つの質問をします。

a. ポーリングを使用せずに、あるインスタンスから別のインスタンスにデータをプッシュできますか? 答えは一般的にいいえです。

b. 1 つのクライアントがサーバーにメッセージを送信し、それを他のクライアントに伝達できますか? はい。他のサーバー側インスタンスにメッセージを伝播する必要はありません。

Channel API をサービスと考えてください。クライアントは Channel API サービスに接続されます。それらは特定のインスタンスに接続されていません。したがって、任意のインスタンスが任意のクライアントにメッセージを送信できます。

  1. ルールに一致するようにクエリ可能な何らかの方法で、クライアントのチャネル トークンをデータストアに格納する必要があります。
  2. クライアントは HTTP リクエストを作成して、サーバーにメッセージを送信します。
  3. サーバー上のハンドラーは、メッセージを (memcache またはデータストアから) 伝播するために必要なチャネル トークンを照会します。
  4. サーバー上のハンドラーは、すべてのクライアントにメッセージを送信します。

宛先クライアントのリストが非常に大きい場合は、操作をより長く実行できるタスク キューで手順 3/4 を実行することをお勧めします。

于 2013-02-21T17:37:00.150 に答える
0

クライアントがどのインスタンスに接続されているかは問題ではなく、API によって隠されています。

クライアントは、標準の HTTP コマンドを介してのみメッセージに「返信」できます。実際には、チャネル API を介して直接応答する方法はありません。

したがって、サーバー A1 のクライアント A は、サーバー B1 のクライアント B にメッセージを送信したいと考えています。

クライアント A がハンドラーに投稿します。それはインスタンス A1 または B1 である可能性があります。クライアント B がチャネル API を介して接続されているサーバーが何であれ、サーバーがクライアント B にメッセージを渡すようになったので、どちらでもかまいません。

本当のポイントは、一般に、App Engine インスタンスにはデータがまったくないということです。したがって、どのインスタンスに接続しても問題ありません。99 番目のインスタンスまたは最初に起動するインスタンスである可能性があります。そのため、どのインスタンスが使用されているかに関係ないようにアプリケーションを設計する必要があります。

  1. クライアントは HTTP 経由でサーバーにメッセージを送信します。

  2. サーバーは、チャネル API を介して N 個のクライアントにメッセージを送信します。

于 2013-02-21T17:34:43.207 に答える
0

Channel API は、固定されたフロントエンド インスタンスからクライアントへの接続を確立しません。チャネル ID がわかっている場合、フロントエンド インスタンスはメッセージをチャネルにプッシュできます。

あなたがする必要があるのは、クロスチャネルでメッセージを渡すことです。

  1. ユーザー 1 がメッセージを通常どおりサーバーに送信します (例: GET 経由)
  2. サーバーは 2 番目のユーザーのチャネル ID を検索し、メッセージをプッシュします
  3. 反対方向に手順を繰り返します: 2 番目のユーザーから最初のユーザーへ。
于 2013-02-21T18:00:07.550 に答える