Джерси SSE: клиент не уведомляет, когда соединение закрыто - PullRequest
0 голосов
/ 24 апреля 2019

Я использую функцию Джерси SSE для получения SSE с сервера. Вот мой код, который почти идентичен тому, что я нашел в документации Джерси о SSE (15.6.2.1)

Client client = ClientBuilder.newBuilder().register(SseFeature.class).build();
client.property(ClientProperties.CONNECT_TIMEOUT, CONNECTION_TIMEOUT);
WebTarget target = client.target(URL);
EventInput event = null;
int retry = 0;
while (retry <= MAX_CONNECTION_RETRY) {
    try {

        if (event == null || event.isClosed()) {
            //(re)connect
            event = createEvent(target);
        }
        InboundEvent inboundEvent = event.read();
        //reconnect if connection is closed
        if(inboundEvent==null){
            retry++;
            continue;
        }
        /// process event ...
    }
    catch(IOException ex){
        //reconnect in case this chunked input has been closed.
        retry++;
    }
}

Все идет хорошо, пока сервер не закроет соединение через некоторое время (примерно через 1 день), и нам нужно повторно подключиться к серверу. Я ожидаю, что event.read() должен вернуть ноль или выдать исключение, но ничего не происходит. Процесс остается в тупике.

Есть ли что-то, что мне не хватает в этом коде. Я регистрирую каждую строку, и я почти уверен, что она застряла на event.read()

...