3

20〜30台のAndroidデバイス(Androidハニカム/ ICS OSを搭載したタブレットに固有のターゲット)で実行され、ローカルWIFIネットワークを介した接続を1〜2時間維持し、データを交換する必要がある非市場アプリケーションを開発しています(それらの間のコマンドを表す単純なオブジェクト)。

ほとんどの場合、1つの特定のタブレットはコマンドを送信するサーバーのように動作し、他のデバイスはコマンドを受信するクライアントのように動作しますが、「クライアント」は「サーバー」にコマンドを送信することもあります。

この通信需要の解決策として、私はしばらくの間、
TCPクライアント/サーバープロトコルをカプセル化するオープンソースライブラリを使用しています。これはKryonetと呼ばれます。私はそれが非常に使いやすく、基本的に仕事をしていることに気づきましたが、それは時々「不安定」であり、多くの切断が発生します。この切断を行う余裕はありません。フロー全体とユースケースを損ない、クライアントのコマンドを失う原因になります。

クライアントを再接続し、クライアントが見逃したものを送信するリカバリロジックを実行していますが、ユースケースには十分ではありません。

最近、マルチキャストブロードキャストプロトコルについて聞いたことがあり、オープンソースライブラリの呼び出しでさえも見つかりました。このプロトコルを最適に実装し、使いやすいインターフェイスを公開するJGroupsです。まだ試していませんでしたが、知っている人からアドバイスをもらいました。私の目的には、TCPクライアント/サーバーの方が優れているはずです。

  • 説明した動作を実装するために使用する必要がある最善のアプローチは何ですか?(必ずしも私が提案した2つのうちの1つではありません)

TIA

4

1 に答える 1

3

JGroups は状況に対するより良い解決策として約束されていますが、切断が発生している理由を特定するためにもう少し実験することをお勧めします。クライアントとサーバーはすべてタブレットであるため、関連のない他の原因がいくつかあります。

1) 接続が維持されていない場合、Serviceデフォルトでは非常に信頼性が低くなります。( Android で破棄されるシングルトンに関するこの質問を参照してください)

2) ソケットが「キープアライブ」に設定されていない場合、ソケットは任意の秒数後にタイムアウトします。

3) 使用しているデバイスは、スリープ状態になると永続的な接続をシャットダウンする場合があります。

4) タブレットが WiFi 範囲を終了し、モバイル ネットワークに切り替わっている可能性があります。

コードのネットワーク部分を多数のデスクトップ マシンで試して、問題が Kryonet にあるのかコードにあるのか、それとも Android での実行に問題があるのか​​を判断します。

于 2012-07-19T19:39:18.413 に答える