私は小さなプロジェクトを始めています。基本的には、古典的な戦艦ゲームのマルチプレイヤー(2人以上のプレイヤーのように)のバリエーションです。
コーディングに飛び込む前に解決しようとしている問題の1つは、複数のプレーヤー間の通信の問題です。現在の可能性は、中央のHTTPサーバーを通信の中央ハブとして使用することです(Android C2DM APIと組み合わせて、HTTPサーバーからデバイスへのプッシュ通信を可能にします)。理論的には、インターネットにアクセスできる限り、NATの背後にいるかどうかに関係なく、インターネットは完全に機能するはずなので、これは優れた解決策のようです。
ただし、提案されたソリューションには、既存の単一障害点/追加の負荷(Webサーバー)という欠点があります。だから私は他のオプションを試してみたいと思います。クライアント間でソケットを使用して直接接続することを考えました(Webサーバーを最初のミーティングポイントとして使用するだけです)が、これはすべてのデバイスが同じネットワーク内にある場合にのみうまく機能します。今日、私たちはほとんどの場合ルーターのNATの背後にいることを考えると、どうすれば直接通信を実現できますか?私は穴あけについて読んでいますが、十分に文書化されており(使用例が含まれています)、Androidで確実に機能する優れたライブラリを見つけることができません。また、広く利用可能なほとんどの(すべてではないにしても)穴あけ技術(STUN、ICEなど)はUDPでのみ機能します。これは、一部のメッセージを失う可能性のあるオーディオ/ビデオおよびリアルタイムマルチプレイヤーゲームに適しています。
では、 NATの背後にあるAndroidデバイス間で(できればTCPを介して)信頼性の高いホールパンチングを実現する方法はありますか?100%の場合に機能する必要はありませんが(一部の見知らぬNATはサポートされていない可能性があります)、ほとんどの場合に機能すると便利です。