服务器发送事件关闭连接 - Spring Boot

Ste*_*ith 5 javascript java spring server-sent-events spring-boot

我有一个关于 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;
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能让客户端关闭该对象呢?亲切的问候

小智 0

我假设您正在使用“发射器”来发送未来的更新。尝试完成发射器并将其从发送发射器更新的 catch (IOException) 块中的“emimtter”中删除: