事件源待定 - 泽西 Java 服务器

Event source pending - Jersey Java server

先了解一些上下文。在服务器端,我使用的是 Jersey 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 的以下字段

我仍然没有弄清楚为什么,或者即使这就是请求被挂起的原因。

原来问题是由在 servlet 上启用并匹配 SSE 端点的 GZip 过滤器引起的。

禁用过滤器可以解决问题,它的行为符合预期。