24

私は小さなプロジェクトを始めています。基本的には、古典的な戦艦ゲームのマルチプレイヤー(2人以上のプレイヤーのように)のバリエーションです。

コーディングに飛び込む前に解決しようとしている問題の1つは、複数のプレーヤー間の通信の問題です。現在の可能性は、中央のHTTPサーバーを通信の中央ハブとして使用することです(Android C2DM APIと組み合わせて、HTTPサーバーからデバイスへのプッシュ通信を可能にします)。理論的には、インターネットにアクセスできる限り、NATの背後にいるかどうかに関係なく、インターネットは完全に機能するはずなので、これは優れた解決策のようです。

ただし、提案されたソリューションには、既存の単一障害点/追加の負荷(Webサーバー)という欠点があります。だから私は他のオプションを試してみたいと思います。クライアント間でソケットを使用して直接接続することを考えました(Webサーバーを最初のミーティングポイントとして使用するだけです)が、これはすべてのデバイスが同じネットワーク内にある場合にのみうまく機能します。今日、私たちはほとんどの場合ルーターのNATの背後にいることを考えると、どうすれば直接通信を実現できますか?私は穴あけについて読んでいますが、十分に文書化されており(使用例が含まれています)、Androidで確実に機能する優れたライブラリを見つけることができません。また、広く利用可能なほとんどの(すべてではないにしても)穴あけ技術(STUN、ICEなど)はUDPでのみ機能します。これは、一部のメッセージを失う可能性のあるオーディオ/ビデオおよびリアルタイムマルチプレイヤーゲームに適しています。

では、 NATの背後にあるAndroidデバイス間で(できればTCPを介して)信頼性の高いホールパンチングを実現する方法はありますか?100%の場合に機能する必要はありませんが(一部の見知らぬNATはサポートされていない可能性があります)、ほとんどの場合に機能すると便利です。

4

3 に答える 3

10

gtalk上でsmackを介してxmppを使用します。サーバーと単一障害点について心配する必要はありません。グーグルにそれについて心配させてください!私は、通信レイヤーとしてgtalkを使用して、2人のプレーヤーと対戦できるようにTetrisを作成しました。http://code.google.com/p/tetrads-drop-lite/より多くのプレーヤーが必要な場合は、MUCを試すことができます。

于 2012-04-04T15:46:42.647 に答える
1

UDPは信頼できる配信ではありませんが、UDPパケットの送信に確認応答の返送を要求することで、信頼性を高めることができます。これは、他のいくつかの要件とともに、TCPをIP上で信頼できるものにします(最初は信頼できません)。

注として、これは実装可能ですが、おそらく時間がかかり、コスト/メリットが状況によってうまくいかない場合があります。

于 2015-06-15T10:04:31.863 に答える
0

あなたはほとんど仲介者を使うことを余儀なくされています。一部のNATデバイス間でTCP接続を確立するために機能するメカニズムについては、Natblasterを検索できますが、両方のデバイスをルート化せずにAndroidで使用できるものではありません。そしてそれでも、それは実験的です。

おそらく、jabberのような既存のフェデレーションメッセージングシステムを使用するのが最善です。

于 2012-04-04T15:47:59.797 に答える