Неблокирующее чтение в сокете Java для тайм-аута уровня приложения - PullRequest
0 голосов
/ 09 июля 2019

Мне нужно реализовать тайм-аут на прикладном уровне .Я собираюсь отправить токен, а получатель отправит его мне.Если произойдет больше времени ожидания, я собираюсь вызвать исключение и попытаться повторно подключиться к получателю.

Проблема в том, что Я не могу использовать операции блокировки для чтения потока , потому что янужно проверить таймер на время ожидания.

Я пытался с 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

Спасибо, ребята

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...