【发布时间】:2022-01-16 10:01:09
【问题描述】:
我有一个关于 Java Spring Boot 中的 SSEEmitter 的问题。 我有以下代码在 Java Spring Boot 中建立客户端和服务器之间的连接。我已将 SseEmitter - 对象的超时设置为 long 的最大值。
现在出现以下场景:我关闭了浏览器中的选项卡,但服务器上的 sseemitter 对象没有关闭。服务器上有这么多对象。这会导致内存问题。
@RequestMapping(value = "/subscribe", consumes = MediaType.ALL_VALUE)
public SseEmitter subscribe() {
System.out.println("SUBSCRIBE CALLED!");
System.out.println(emitters.size());
SseEmitter x = new SseEmitter(Long.MAX_VALUE);
try {
x.send(SseEmitter.event().name("INIT"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
x.onCompletion(()->{
System.out.println("ON COMPLETION CALLED!");
emitters.remove(x);
});
x.onTimeout(()->{
System.out.println("ON TIMEOUT CALLED!");
emitters.remove(x);
});
emitters.add(x);
return x;
}
如何说客户端关闭对象? 亲切的问候
【问题讨论】:
-
您是否偶然找到了解决方案?我正在为同样的问题而苦苦挣扎,并且很想知道是否有可能检测到客户端在 SSE 中的断开连接。
标签: javascript java spring spring-boot server-sent-events