当前位置: 首页 > 知识库问答 >
问题:

使用 Spring WebFlux 和 EventSource 的 Server Sent Events

乐宜民
2023-03-14

我正在处理服务器发送的事件。

参考链接:http://sinhamohit.com/writing/spring-boot-reactive-sse

上面的例子包括Spring Boot和WebFlux的SSE。

Spring WebFlux和HTML5 EventSource有任何可用的示例吗?

共有1个答案

郝昊东
2023-03-14

用WebFlux创建简单的项目。下面是服务器发送事件的控制器方法:

@GetMapping(value = "/notifyonEvent", produces = 
MediaType.TEXT_EVENT_STREAM_VALUE)  
public Flux<String> getData() {
Random r = new Random();
int low = 0;
int high = 50;
return Flux.fromStream(Stream.generate(() -> r.nextInt(high - low) + low)
    .map(s -> String.valueOf(s))
    .peek((msg) -> {
        LOGGER.info(msg);
    }))
    .map(s -> s)
    .delayElements(Duration.ofSeconds(1));
}

客户端

var source = new EventSource("YOURAPP_URL/notifyonEvent");
source.onmessage = function(event) {
  console.log(event.data);
};
 类似资料:
  • 我有以下服务器端播放代码,以便为HTML5事件源提供endpoint。 我的路线是这样的 获取/事件控制器。应用事件 当Chrome浏览器通过EventSource对象连接自身时,该服务器工作正常。由于IE不支持EventSources,所以我正在使用此polyfill库。现在的问题是:IE正确地订阅了事件,正如我看到的“已连接并订阅”日志输出一样,但一旦事件应传递到此连接,它就会记录“SSE d

  • 我希望为每个请求生成唯一的traceId,并将其传递给所有服务。在SpringMVC中,使用MDC上下文并将traceId放在头文件中相当容易,但在反应式堆栈中,由于ThreadLocal,它根本不起作用。 一般来说,我希望使用单个traceId记录我拥有的每个服务上的每个请求和响应,该traceId可以识别整个系统中的特定操作。 我试图根据文章创建自定义过滤器:https://azizulhaq

  • 我想为我的网站创建实时通知。 参考链接:http://sinhamohit.com/writing/spring-boot-reactive-sse 我该怎么做呢?参考,链接和例子将是伟大的。

  • 我正在使用reactive mongodb开发简单的spring webflux演示应用程序,我想按姓名读取员工的所有数据,但不包括姓名字段“joe”、“Sara”、“joe”、“Sara”,我有如下代码: //仓库接口 //服务类

  • 我使用nghttp2实现了一个REST服务器,它应该使用HTTP/2和服务器发送的事件(由浏览器中的EventSource使用)。然而,基于这些例子,我不清楚如何实现SSE。像在< code>asio-sv.cc中那样使用res.push()似乎不是正确的方法。 做这件事的正确方法是什么?我更喜欢使用nghttp2的C API,但是C API也可以。

  • 在https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt该注释显示了如何通过新的“函数bean定义Kotlin DSL”定义SpringBean。我还发