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-3 毫秒,因为它是非阻塞的。

这是一个已知的问题 ?我正在使用 Selector 为 SelectionKey.OP_CONNECT 选择 10 多个 SocketChannel。在这种情况下,Selector.select 使用 100 毫秒的超时,但总时间超过 1 秒,这主要是因为 SocketChannel.connect。是否有任何替代方法可以避免 SocketChannel.connect 的问题,并且仍然可以在 100 毫秒内完成选择器。

谢谢亚历克斯

4

1 回答 1

0

如果remoteAddr是 a String,将尝试(阻塞)将该名称解析为InetAddress. 见这里

30 到 100 毫秒听起来像是一个合理的 DNS 查询往返时间。

这意味着,延迟发生在connect()甚至被调用之前。

于 2012-07-09T07:25:26.393 回答