Мне нужно реализовать тайм-аут на прикладном уровне .Я собираюсь отправить токен, а получатель отправит его мне.Если произойдет больше времени ожидания, я собираюсь вызвать исключение и попытаться повторно подключиться к получателю.
Проблема в том, что Я не могу использовать операции блокировки для чтения потока , потому что янужно проверить таймер на время ожидания.
Я пытался с Scanner, DataInputStream и InputStream, но все их операции (nextDouble (), hasNext (), readDouble ()) блокируются.
Единственный способ, которым я думал, что это возможно, - это доступный метод DataInputStream, который не блокирует, но тоже не работает.
while (timer < timeout) {
if(in.available() > 0) {
byte[] buf = new byte[in.available()];
in.read(buf);
if(ByteBuffer.wrap(buf).getDouble() == token) {
System.out.println("ALIVE");
return context.transformMessageToString();
}
System.out.println("Token not matched");
}
timer = System.currentTimeMillis()-start;
}
System.out.println("NOT ALIVE");
throw e;//timeout try reconect
Спасибо, ребята