Используя неблокирование ввода-вывода, код для соединения с удаленным адресом смотрит что-то как:
SocketChannel channel = SelectorProvider.provider().openSocketChannel();
channel.configureBlocking(false);
channel.connect(address);
Процесс соединения должен будет затем быть закончен путем вызова finishConnect()
на канале, когда некоторый селектор говорит соответствующий ключ isConnectable()
.
Существует ли способ указать тайм-аут соединения при использовании этой идиомы?
Интересный вопрос. Я не уверен, что сам nio предлагает решение.
По моему опыту, я запустил Callable, чтобы попытаться установить соединение, а затем использовал Future для опроса ответа, используя переменные interval и timeout для цикла и Thread.sleep () для ответа.
Надеюсь, это укажет вам полезное направление ...
Также я предлагаю вам взглянуть на Apache Mina (вы могли бы описать Mina как фреймворк nio). Он выполняет для вас много такого рода вещей, например, в StreamIoHandler http://mina.apache.org/report/trunk/apidocs/org/apache/mina/handler/stream/StreamIoHandler.html