0

私は現在、TCP 経由で通信するために 2 つのデバイスを必要とする Android アプリケーションを開発しています (UDP が出ているので、静かにパケットを失うことはできません)。通信をできるだけ高速にする必要があります (つまり、許容可能な待機時間のしきい値が低い) が、接続の寿命は短くなります (おそらく 2 分未満)。電話は接続し、自分のことを行い、接続を閉じます。

NAT ホール パンチングに関してかなりの調査を行いましたが、Java および Android 用に実装された信頼性の高い tcp ホール パンチング メソッドはないようです。したがって、私の唯一の選択肢は、2 つのデバイス間の TCP 通信を「プロキシ」するサーバー アプリケーションを開発することです。

2 つの質問があります。

1) 車輪を再発明したくありません: 使用できる単純な tcp プロキシは既に作成されていますか? (注: あらゆる種類の http プロキシではありません。低レイテンシーが必要なため、デバイス上の 2 つの tcp ソケット接続間で非常に小さなペイロードを渡したいだけです)。サーバーの唯一の目的は、NAT の問題を回避することです。

2) そうでない場合、このような経験をしたことがある人はいますか? 私は、Java NIO や、接続ごとに新しいスレッドを作成するサーバーのアイデアをいじりました (問題は、適切な「クライアント」スレッドをリンクして情報をやり取りする方法です)。それとも、Java はサーバー側で使用するのに最適な言語でさえありますか?

Google のチャット サービスを介して XMPP を使用するための推奨事項をいくつか読みましたが (こちらを参照)、XMPP のオーバーヘッドは必要ありません。

方向性や提案は大歓迎です。

4

1 に答える 1

0

あなたの質問への直接の答えに関して:

1)私が見つけた良いものではありません、それは本当にあなたのサーバーで利用できるものに依存します。私は少し前にPHPで作成しましたが、非常に迅速かつシンプルで、ほとんどのサーバーで動作します。これをガイドとして使用しましたhttp://devzone.zend.com/209/writing-socket-servers-in-php/

ここで見ることができるコンパイル済みのC++バイナリを実行できる場合、それは私たちが検討した代替手段でした:http: //tcpproxy.codeplex.com/

2)PHPオプションについては、1の回答を参照してください。Javaで最初から作成した経験はありません。

NATトラバーサルの脇として...私が取り組んでいるプロジェクトで同じNATの問題を調査していて、NDKを必要とするが、AndroidでのNATトラバーサルにはうまく機能する2つのオプションを見つけました。pjnath(GPL):

www.pjsip.org/pjnath/docs/html

code.google.com/p/csipsimple/source/browse/trunk/pjsip_android/?r=201

libnice(LGPL):

nice.freedesktop.org/wiki/

于 2012-05-24T09:55:22.803 に答える