Ожидается источник события - сервер Джерси Java - PullRequest
0 голосов
/ 09 мая 2019

Сначала немного контекста. На стороне сервера я использую Джерси 2.28 и включил jersey-media-sse в качестве зависимости

Код на стороне сервера выглядит следующим образом

@GET
@Path("{id}")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void orderUpdates(@PathParam("id") String id, @Context SseEventSink sink) {
    service.subscribe(id, sink, sse);
    OutboundSseEvent initialMessage = sse.newEventBuilder().comment("Connection initiated").build();
    sink.send(initialMessage);
}

Код на стороне клиента - в js

this.eventSource = new EventSource(URL);
this.eventSource.onmessage = e => console.log(JSON.stringify(e));

Но соединение всегда находится в состоянии (в ожидании) , хотя, подключив отладчик, я вижу, что выполняется код сервера.

network console - EventSource stuck on pending

Отладка другого проекта, где sse успешно используется (с теми же зависимостями), а точка останова находится на sink.send(..) Я обнаружил, что следующие поля SseEventSink не заполнены в моем случае

  • requestScope
  • RequestContext
  • responseContext
  • connectionCallback

enter image description here

Я до сих пор не понял, почему, или даже если это является причиной того, что запрос застрял на ожидании.

1 Ответ

0 голосов
/ 19 мая 2019

Оказывается, проблема была вызвана фильтром GZip, который был включен на сервлете и соответствовал конечной точке SSE.

Отключение фильтра устраняет проблему и ведет себя как ожидалось.

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