Я использую функцию Джерси 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()