3

クロスプラットフォームのモバイルクライアント(Android、PC- Javaで記述されたものとObjective-Cで記述されたiOS )とGoogle AppEngine(Java)サーバーの間で双方向通信を実装したいと思います。そうすべき:

  1. (クライアントが接続した後)各側が通信を開始できるようにします。
  2. レイテンシが比較的短い(X秒ごとにポーリングするのは問題があります。私の理解では、AppEngine上にあるため、httpリクエストを長時間ポーリングすることはできません)。
  3. 最大で数KBのテキストで、通常ははるかに小さいメッセージをサポートします。

リバースエンジニアリングされたJavaクライアントでChannelAPIを使用することを検討しましたが、これはチャンスをつかんでいるようです(公式にはサポートされていないため)。また、Objective-Cの解決策があるかどうかさえわかりません。私は、自分でそれを実行して実装することを好みません。

次に、XMPPの使用を検討しました。ただし、ユーザーにJabberアカウントを入力させずにこれを行う方法はわかりませんが、これはできません(通信はバックグラウンドで行われます)。クライアントの一時ユーザーを作成する方法はありますか?

C2DMも良い選択肢ではないようです。これはクロスプラットフォームではなく、通信ではなく「通知」に非常に重点を置いているようであり、メッセージ転送の成功を保証するものではありません。

それとも、私が考えていなかったまったく異なるアプローチがありますか?この種のコミュニケーションは私にとって比較的新しいものです。

ありがとう!

編集:

バックグラウンド通信を探しているので、新しいオプションが思い浮かびました。クライアント識別子としてリソースを持つ単一のXMPPユーザーです。つまり、アプリ用に1つのXMPPユーザー( "AppBackgroundUser@domain.com"など)を作成し、クライアントにリソースとして独自のID( "AppBackgroundUser@domain.com/UNIQUEID")を接続させます。 )。この方法に欠点や重大なセキュリティ上の欠陥はありますか?

4

2 に答える 2

2

私が考えることができる2つのオプション:

  • Java アプリに HTML ページを埋め込み、その匿名エンドポイントに Channel API を使用できます。次に、メッセージを受け取ったらアプリに通知します。これは、Channel API の実装における気まぐれな変更の影響を受けません。
  • XMPP API を使用する場合、何らかの XMPP アカウントが必要であることは間違いありません。AWS または他の場所で非常に単純な XMPP サーバーを実行し、クライアントをそれに接続することを検討できます。その後、App Engine アプリから独自のサーバー上のアドレスにメッセージを送信できます。ejabberd が最適なサービスのようです。
于 2012-01-31T14:07:45.513 に答える
0

XMPP が最善の策のように思えますが、匿名クライアントが登録の問題を回避できるようにサーバーを構成する必要があります。

ただし、どちらかの側が通信を開始するという意味がわかりません。XMPP では、クライアントがサーバーに接続して開始する必要がありますが、その後はプロンプトなしでメッセージを受信できます。もちろん、サーバーがプロンプトなしでメッセージをクライアントに送信することを意図している場合、何らかのクライアント ID (つまり、何らかの形式の登録) を持たないクライアントをどうやって知るのでしょうか?

于 2012-01-31T17:43:20.673 に答える