Spring boot SSE(服务器发送事件):如何动态发送响应

Posted

技术标签:

【中文标题】Spring boot SSE(服务器发送事件):如何动态发送响应【英文标题】:Spring boot SSE (Server sent events): how to send response dynamically 【发布时间】:2020-01-11 05:36:41 【问题描述】:

我是 SSE(服务器发送事件)的新手。我找到了一种在 Spring Boot 中使用 SSE 发送响应的方法。我能够每 20 秒发送一次响应。我用下面的代码来做同样的事情。

public Flux<UserDto> fetchUserEvent() 
        return Flux.interval(Duration.ofSeconds(20)).map(intr -> generateUserEvent()).flatMapIterable(x -> x);
    

generateUserEvent() - verify if new user added in DB. If it found user data, will return the same or will return empty object (new UserDto())

但问题是,此方法每 20 秒调用一次。

但是,我的要求是每 20 秒向客户端发送一次空响应,并在新用户添加到数据库时发送响应。

我怎样才能实现我的目标?或者我在概念上完全错误。

【问题讨论】:

【参考方案1】:

您应该创建一个事件发布者和侦听器,以便在注册新用户时向发射器发送事件。

由于您使用的是 spring-boot 并且可能是休眠的,因此您可以在此处查看有关如何拦截休眠事件的示例。

Hibernate interceptor or listener with Spring Boot and Spring Data JPA

我会个人不使用通量并在春季制定一个预定的方法来将那些空的 ping 响应发送到发射器。这方面的例子可以在这里找到:https://www.roytuts.com/server-sent-events-spring-push-notifications/

一般春季活动的更多信息可以在这里找到: https://www.baeldung.com/spring-events

【讨论】:

以上是关于Spring boot SSE(服务器发送事件):如何动态发送响应的主要内容,如果未能解决你的问题,请参考以下文章

服务器使用 Spring Boot 和 WebFlux 发送事件

收到服务器发送事件并立即发现错误导致 SSE 关闭

Spring中的SSE(服务器端事件)——存储SseEmitters

Spring Boot 自动配置的 Jackson ObjectMapper 默认不用于 WebFlux WebClient

SSE 服务器发送事件 - 客户端不断发送请求(如池)

Spring中的服务器发送事件客户端示例