服务器发送事件
Posted: Sun Mar 23, 2025 8:01 am
打字稿
最近我一直以全栈开发人员的身份工作,我一直在开发 Angular 前端和一些 Spring-Boot 后端服务。如果你问我,这非常时髦和新潮,而且非常有趣。
我面临的问题之一是服务呼叫需要很长时间才能完成。该操作的初始响应只需几秒钟即可返回,但最终处理则需要一些时间。 通常这不会是个问题,但是,除非操作由于某种原因失败,否则我们不想打扰用户。所以我们需要一种不阻塞任何操作的方式来向用户发送消息。这样用户就可以继续工作。
为此,我们首先研究了 websocket,但是它只是单向通信,所以为什么要 开曼群岛号码数据 费心设置 websocket 连接的额外复杂性。因此,我们寻找更接近当前设置(http rest 风格的通信)的东西,并提出了服务发送事件。不太复杂,并且可以找到很多关于如何使用它的帖子。然而,所有的例子都会在事情变得有趣的时候停止。如何从另一个事件(异步过程)发出一个新事件。所有示例都只是执行一个 while 循环并每秒发出一个事件,很简单!在这篇文章中,我将向您展示如何使用 Spring-boot 设置服务器发送事件(从现在开始为 SSE)端点,以及如何通过 bean 发出您自己的酷事件。
服务器
首先,我们需要创建一个能够处理 SSE 的端点。这可以在 Controller 类中完成:
复制
在这个类中你会注意到一些事情,首先是 GetMapping。它产生一个TEXT_EVENT_STREAM_VALUE,换句话说,我们告诉spring我们想要发出事件。您接下来会注意到的是 startSSE 返回的 Flux<Notification> 对象。 Flux 来自 spring WebFlux 库,基于 Reactive 概念(在之前的文章中解释过:<Link goes here>)。对于我的忠实读者或那些使用过 RxJava 或 RxJS 等反应式框架的人来说。 Flux 就像一个 Observable,只是你称之为 Flux。
使用 Flux 对象我们可以发出通知对象,这正是我们想要的!现在通过返回 Flux 对象,每个新事件都会发出一个新的通知对象。在这个例子中,我们每秒发出一个新通知。运行应用程序并转到http://localhost:8080/notification后,您将在浏览器中看到每秒一个新通知(一些 json 字符串)。太棒了,现在我们需要改变它,以便我们只发出有意义的通知!
所以这是 SSE 上帖子停止的部分,我不得不寻找解决方案。我在 EmitterProcessor 类中找到它:
最近我一直以全栈开发人员的身份工作,我一直在开发 Angular 前端和一些 Spring-Boot 后端服务。如果你问我,这非常时髦和新潮,而且非常有趣。
我面临的问题之一是服务呼叫需要很长时间才能完成。该操作的初始响应只需几秒钟即可返回,但最终处理则需要一些时间。 通常这不会是个问题,但是,除非操作由于某种原因失败,否则我们不想打扰用户。所以我们需要一种不阻塞任何操作的方式来向用户发送消息。这样用户就可以继续工作。
为此,我们首先研究了 websocket,但是它只是单向通信,所以为什么要 开曼群岛号码数据 费心设置 websocket 连接的额外复杂性。因此,我们寻找更接近当前设置(http rest 风格的通信)的东西,并提出了服务发送事件。不太复杂,并且可以找到很多关于如何使用它的帖子。然而,所有的例子都会在事情变得有趣的时候停止。如何从另一个事件(异步过程)发出一个新事件。所有示例都只是执行一个 while 循环并每秒发出一个事件,很简单!在这篇文章中,我将向您展示如何使用 Spring-boot 设置服务器发送事件(从现在开始为 SSE)端点,以及如何通过 bean 发出您自己的酷事件。
服务器
首先,我们需要创建一个能够处理 SSE 的端点。这可以在 Controller 类中完成:
复制
在这个类中你会注意到一些事情,首先是 GetMapping。它产生一个TEXT_EVENT_STREAM_VALUE,换句话说,我们告诉spring我们想要发出事件。您接下来会注意到的是 startSSE 返回的 Flux<Notification> 对象。 Flux 来自 spring WebFlux 库,基于 Reactive 概念(在之前的文章中解释过:<Link goes here>)。对于我的忠实读者或那些使用过 RxJava 或 RxJS 等反应式框架的人来说。 Flux 就像一个 Observable,只是你称之为 Flux。
使用 Flux 对象我们可以发出通知对象,这正是我们想要的!现在通过返回 Flux 对象,每个新事件都会发出一个新的通知对象。在这个例子中,我们每秒发出一个新通知。运行应用程序并转到http://localhost:8080/notification后,您将在浏览器中看到每秒一个新通知(一些 json 字符串)。太棒了,现在我们需要改变它,以便我们只发出有意义的通知!
所以这是 SSE 上帖子停止的部分,我不得不寻找解决方案。我在 EmitterProcessor 类中找到它: