0
SocketChannel sockChannel = SocketChannel.open();
sockChannel.configureBlocking(false);
sockChannel.connect(new InetSocketAddress(remoteAddr, remotePort));

Android バージョン 2.3.4 および 3.2.1 では、接続に 30 ミリ秒から 50 ミリ秒、場合によっては 100 ミリ秒以上かかります。2 つのハードウェアでいくつかのテストを実行しましたが、常に遅いです。非ブロッキングであるため、2〜3ミリ秒もかからないことを望んでいました。

これは既知の問題ですか? Selector を使用して、SelectionKey.OP_CONNECT の数十の SocketChannel を選択しています。この場合、Selector.select は 100 ミリ秒のタイムアウトを使用しますが、全体の所要時間は 1 秒を超えます。これは主に SocketChannel.connect が原因です。SocketChannel.connect の問題を回避し、100 ミリ秒でセレクターを終了するための代替手段はありますか。

ありがとうアレックス

4

1 に答える 1

0

remoteAddrが の場合String、その名前を に解決する (ブロック) 試行が行われますInetAddressここを参照してください。

30 ~ 100 ミリ秒は、DNS クエリの妥当な往復時間のように思えます。

つまり、connect()呼び出される前に遅延が発生します。

于 2012-07-09T07:25:26.393 に答える