Spring Boot 使用 SSE 方式向前端推送数据详解

Spring Boot 使用 SSE 方式向前端推送数据详解

概述

Server-Sent Events (SSE) 是一种基于 HTTP 协议的服务器推送技术,可以将服务器端的实时数据流推送给客户端,常用于构建实时通讯、监控等场景。Spring Boot 提供了很好的支持,可以方便地将 SSE 技术应用于开发中。

步骤

1. 添加依赖

在 pom.xml 文件中添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

第一个依赖是 Spring Boot Web 的基础依赖,第二个依赖是 Spring Boot WebFlux 支持 SSE 的依赖。

2. 建立 Controller

在 Spring Boot 项目的 Controller 层中添加 SSE 支持,示例如下:

@RestController
@RequestMapping("/sse")
public class SseController {
    @GetMapping(value = "/event")
    public Flux<ServerSentEvent<String>> getEvent(){
        return Flux.interval(Duration.ofSeconds(1))
                .map(e-> ServerSentEvent.builder(e.toString()).build());
    }
}

在 Controller 中,使用 @GetMapping 注解进行请求映射,并使用 FluxServerSentEvent 类型进行数据流的定义。在上述示例中,每隔 1 秒钟就会向前端推送一个 ServerSentEvent 事件,其中的数据为 0, 1, 2 ... 以此类推。

3. 前端接收 SSE 数据

在前端,我们可以使用 EventSource 进行 SSE 数据的监听和接收,示例如下:

var eventSource = new EventSource("/sse/event");

eventSource.onmessage = function(event) {
    console.log("接收到数据:" + event.data);
}

在前端中,我们创建了一个 EventSource 对象,并将请求地址设置为 "/sse/event",这和上文 Controller 层中 @GetMapping 中的请求映射相匹配。之后,在 EventSource 对象的 onmessage 回调函数中,我们可以获取到推送过来的数据,这里只是简单地将数据打印在控制台中。实际情况中,我们可以根据需要对数据做进一步处理,如实时更新界面等。

示例

以下是一个完整的 Spring Boot SSE 技术的例子:

@RestController
@RequestMapping("/sse")
public class SseController {
    @GetMapping(value = "/event")
    public Flux<ServerSentEvent<String>> getEvent(){
        Random random = new Random();
        return Flux.interval(Duration.ofSeconds(1))
                .map(e-> ServerSentEvent.builder("随机数据:" + random.nextInt(100)).build());
    }
}

上述示例中,我们在数据流中每隔 1 秒钟推送一个 ServerSentEvent 对象,其中包含一个 0-100 之间的随机数。前端代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Spring Boot SSE 示例</title>
</head>
<body>
<div>
    <button onclick="start()">开始接收数据</button>
    <button onclick="close()">停止接收数据</button>
    <p id="data"></p>
</div>

<script type="text/javascript">
    var eventSource = null;

    function start() {
        eventSource = new EventSource("/sse/event");

        eventSource.onmessage = function (event) {
            document.getElementById("data").innerHTML = event.data;
        }
    }

    function close() {
        eventSource.close();
    }
</script>
</body>
</html>

在浏览器中打开该页面后,点击“开始接收数据”按钮,就可以开始接收从后端推送过来的随机数据了。在点击“停止接收数据”按钮后,EventSource 对象会被销毁,停止接收数据。

总结

本文主要介绍了 Spring Boot 中使用 Server-Sent Events (SSE) 技术向前端推送数据的详细步骤,包括添加依赖、建立 Controller 和前端接收 SSE 数据的示例。为了更好地理解 SSE 技术,我们 also 补充了一个完整的 Spring Boot 示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 使用 SSE 方式向前端推送数据详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • SpringBoot小程序推送信息的项目实践

    SpringBoot小程序推送信息的项目实践攻略 简介 本项目实践基于SpringBoot和小程序,实现了推送信息到小程序的功能。本文将详细讲解本项目的实现过程。 准备工作 开发工具:IDEA、微信开发者工具 开发环境:Java 8、Maven 3.6.3、SpringBoot 2.4.0、MySQL 8.0.21 创建SpringBoot项目 在IDEA中…

    Java 2023年5月20日
    00
  • PostgreSql JDBC事务操作方法详解

    PostgreSql JDBC事务操作方法详解 在Java应用程序中,使用JDBC访问PostgreSQL数据库时,我们经常需要使用事务来保证数据的一致性和可靠性。本文将详细介绍使用PostgreSQL JDBC驱动程序执行事务的方法。 驱动程序获取 我们需要先通过以下方式获取PostgreSQL JDBC驱动程序,然后将其放在Java应用程序中: Mave…

    Java 2023年6月16日
    00
  • IDEA+Maven创建Spring项目的实现步骤

    创建Maven项目 使用IDEA创建Maven项目,步骤如下: 点击IDEA的File菜单,选择New,然后选择Project; 在弹出的New Project窗口中,选择Maven; 在下一步中,我们需要输入项目的信息,包括 GroupId、ArtifactId、Version、Project name,这些信息都可以任意填写; 最后,点击Finish按钮…

    Java 2023年5月20日
    00
  • 简单实现Java web服务器

    请先让我简单介绍一下Java web服务器是什么:Java web服务器是通过Java编写的用于处理HTTP请求的服务器。它可以处理静态内容和动态内容。与其他Web服务器不同,Java web服务器通常可以执行Java Servlets和JavaServer Pages(JSP)等代码,以生成动态内容。下面是Java web服务器实现的完整攻略: 1. 确定…

    Java 2023年5月18日
    00
  • 数据库中经常用到的操作和管理数据库的语句总结

    下面是数据库中经常用到的操作和管理数据库的语句总结的攻略。 数据库的操作 创建数据库 创建数据库的语句如下: CREATE DATABASE db_name; 其中,db_name 为数据库的名称。在执行此命令时,数据库的名称必须是唯一的。 删除数据库 删除数据库的语句如下: DROP DATABASE db_name; 其中,db_name 为要删除的数据…

    Java 2023年6月15日
    00
  • spring boot 统一JSON格式的接口返回结果的实现

    下面我来详细讲解一下“Spring Boot 统一 JSON 格式的接口返回结果的实现”攻略。 1. 前言 在实际的项目中,我们往往需要为每个接口编写返回数据的格式,这样很浪费时间。而使用统一的 JSON 返回格式,不仅可以减少代码量,还能让前端开发更加便捷。本文将明确探讨在 Spring Boot 中如何实现这一目标。 2. 统一 JSON 格式的接口返回…

    Java 2023年5月26日
    00
  • 详解Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    Spring的两种代理方式 在使用Spring框架时,我们常常会使用到AOP(面向切面编程)的相关技术,而代理是AOP中必不可少的一个环节。在Spring中,支持两种代理方式:JDK动态代理和CGLIB动态代理。这两种代理方式都有各自的特点和优劣,具体使用哪种方式则要根据具体的情况而定。 JDK动态代理 JDK动态代理是基于接口的代理,它要求目标对象必须实现…

    Java 2023年5月20日
    00
  • Filter、Servlet、Listener的学习_动力节点Java学院整理

    Filter、Servlet、Listener的学习攻略 一、什么是Filter Filter又称过滤器,是Java Web中一种很重要的组件。Filter的主要作用是在 Servlet容器的请求与资源(例如 Servlet、JSP等)之间加一个拦截器,对请求进行预处理,也可以对响应做出后处理。 Filter是Servlet API中最实用的技术之一,它非常…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部