1

私の Android (2.3 以降) アプリケーションは、同時に TCP サーバーを実行している 100 (最大) の組み込みデバイスと TCP 通信する必要があります。

スマートフォン アプリは、100 以上の接続を同時に処理できるほど堅牢である必要があります。頻繁に情報を設定/取得する必要があります。そのため、ネットワーク モジュールについては、次のオプションを分析しました。

  • 第 1の方法: スレッド マネージャー ( ThreadPoolExecutor) を用意し、デバイスごとに接続します。
    • 考えられる問題: 100 のスレッドを作成することは現実的ではありません。
  • 2 番目の選択肢: 各 fd を維持するために Java NIO セレクターを使用する。
    • 問題: Java NIO が遅いようです。チェックするディスクリプタが多いほど、遅くなります。

while (mMainSelector.select(SELECTOR_TIMEOUT) { .... 選択されたキーを取得するもの .... SocketChannel socketChannel = channel.accept()

クライアントが接続を開始してから、上記のコードが最後の行 (channel.accept()) に到達するまで、約 1 ~ 3 秒かかります。

また、私のテストを確認するために、これをサポートするいくつかのブログを参照しました。

NIOを避ける

NIO は IO より速くない

  • 3 番目の選択肢: epoll: セレクターよりは優れていますが、Android ではすぐには利用できないと思います。Androidで使用したことのある人はいますか?epollAndroid用のlibevビルドはありますか?

速度を犠牲にすることなく、数百の同時接続を処理するのに最適な代替手段はありますか?

4

0 に答える 0