0

Java ソケットを介した永続的な接続を使用して、次の方法でクライアント (ネイティブ Android アプリケーション) とサーバー (スタンドアロン Java サーバー) の間で 4 つのメッセージが交換されるプロトコルの完全な実装があります。

(クライアント -> サーバー): メッセージ 1

(サーバー -> クライアント); メッセージ2

(クライアント -> サーバー): message3

(サーバー -> クライアント): message4

各メッセージを送信する間に、クライアントとサーバーの両方が重い数学的 (暗号化) 操作 (楕円曲線上のペアリング ベースの計算) を実行する必要があります。

このプロジェクトは、ソケットを使用してローカル開発マシンで適切に動作し、Android アプリと Java サーバーの間でこのソケットをメッセージ 1 からメッセージ 4 にオープンしました。今、Google AppEngine で同じことをする必要がありますが、ソケットを開くことができないため、どうすればよいかわかりません。Channel API と XMPP API は既に確認しましたが、私のユースケースがその API に当てはまるかどうかはわかりません。AppEngine の Channel API と XMPP API を使用する方法は正しいですか? AppEngine のソケットを介して、ローカル マシンに実装されている機能をエミュレートすることはできますか?

ご回答ありがとうございます。

4

1 に答える 1

0

Google App Engine は永続的な接続をサポートしていません。

HTTP で実行するには、プロトコルを大幅に再設計する必要があります。

たとえば、メッセージ 1 を HTTP リクエストで送信し、メッセージ 2 を一致する HTTP レスポンスで返すことができます。その時点で、ソケット接続は終了します。

message3 で新しいソケットを開くには、2 番目の HTTP 要求を発行する必要があり、2 番目の HTTP 応答で message4 を返すことができます。

HTTP セッションを使用して、1 番目と 2 番目の HTTP 要求を「接続」できます。セッションは基本的に、サーバー側に保存された追加データを持つ ID です。最初の HTTP リクエストでセッションを作成し、それをパラメーターとして 2 番目の HTTP リクエストに渡します。サーバーは、2 番目の要求を処理するときに、セッション ID と関連データを検索できます。

セッションの詳細については、SO: How to use session on Google app engine を参照してください。

XMPP API は役に立ちません。通信プロトコルとして HTTP を使用する GAE サーバー側コードと他の XMPP クライアントとの間で通信するためのものです。

Channel API を使用してサーバーからクライアントへデータを送信できますが、実際には HTTP ロング ポールとして実装されます。複数の長い HTTP リクエストが使用され、単一のソケットが開いたままになる保証はありません。その過程で複数のソケットが開閉されます。上で説明したよりも複雑で、より高価になります。

于 2013-01-15T17:07:11.483 に答える