Сначала немного контекста. На стороне сервера я использую Джерси 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));
Но соединение всегда находится в состоянии (в ожидании) , хотя, подключив отладчик, я вижу, что выполняется код сервера.
Отладка другого проекта, где sse успешно используется (с теми же зависимостями), а точка останова находится на sink.send(..)
Я обнаружил, что следующие поля SseEventSink не заполнены в моем случае
- requestScope
- RequestContext
- responseContext
- connectionCallback
Я до сих пор не понял, почему, или даже если это является причиной того, что запрос застрял на ожидании.