【问题标题】:Server Sent Events Close Connection - Spring Boot服务器发送事件关闭连接 - Spring Boot
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 2019-03-04
    • 2019-01-26
    • 2020-10-04
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    相关资源
    最近更新 更多