当前位置: 首页 > news >正文

Spring: spring中SSE的实现方式有哪些

文章目录

    • 1、使用 ResponseBodyEmitter 或 SseEmitter
    • 2、 使用 WebFlux
    • 3.、使用 WebMvcConfigurer配置类

在 Spring 中实现 SSE(Server-Sent Events)的方式有多种途径,其中比较常用的方法包括:

1、使用 ResponseBodyEmitter 或 SseEmitter

ResponseBodyEmitter: ResponseBodyEmitter 是 Spring 提供的用于异步发送数据到客户端的类,它可以用于实现 SSE。您可以在控制器方法中使用 ResponseBodyEmitter 发送实时数据给客户端。

@RestController
public class SSEController {@GetMapping("/stream")public ResponseBodyEmitter stream() {ResponseBodyEmitter emitter = new ResponseBodyEmitter();// 在此处通过 emitter 发送实时数据return emitter;}
}

SseEmitter: SseEmitter 是专门用于 SSE 的类,它提供了更多与 SSE 相关的功能和配置选项。您可以在控制器方法中使用 SseEmitter 实现 SSE 功能。

@RestController
public class SSEController {@GetMapping("/stream")public SseEmitter stream() {SseEmitter emitter = new SseEmitter();// 在此处通过 emitter 发送实时数据return emitter;}
}

2、 使用 WebFlux

如果您使用的是 Spring WebFlux,您可以利用其响应式编程模型来实现 SSE。通过使用 Flux 和 ServerSentEvent 类,您可以轻松地实现 SSE 功能。

import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@RestController
public class SSEController {@GetMapping("/stream")public Flux<ServerSentEvent<String>> stream() {// 返回一个 Flux<ServerSentEvent<String>> 对象来发送实时数据}
}

3.、使用 WebMvcConfigurer配置类

通过实现 WebMvcConfigurer 接口来配置 SSE 支持,可以用于添加一些全局的配置,比如跨域支持等。

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 添加拦截器}@Overridepublic void addCorsMappings(CorsRegistry registry) {// 配置跨域支持}
}

以上是在 Spring 中实现 SSE 的几种常用方式,您可以根据具体需求选择合适的方法来实现实时数据推送功能。

相关文章:

  • 学习java第一天(下载并配置环境+写第一个java程序)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • Vue2:用node+express写一个轻量级的后端服务
  • 大唐杯学习笔记:Day5
  • Swing程序设计(11)动作事件监听器,焦点事件监听器
  • Docker Compose实战指南:让容器管理变得简单而强大
  • 集成2.5G/5G/10G高速率网络变压器的RJ45网口连接器产品特点介绍
  • 从零开始在kitti数据集上训练yolov5
  • AWS虚拟机迁移到Azure上的实战操作
  • Doris实战——银联商务实时数仓构建
  • HTML简介:想成为前端开发者?先从掌握HTML开始!
  • Linux进程详细介绍
  • C# 属性设置为“get; private set;”好处
  • 亚信安慧AntDB:为数字化铺平道路
  • 详细了解网络通信流程、协议组成、编码方式、数据传输方式和途径、Http 协议的编码、cookie的使用和提取路径
  • [译]前端离线指南(上)
  • 【EOS】Cleos基础
  • AHK 中 = 和 == 等比较运算符的用法
  • ComponentOne 2017 V2版本正式发布
  • fetch 从初识到应用
  • gf框架之分页模块(五) - 自定义分页
  • GraphQL学习过程应该是这样的
  • JS 面试题总结
  • MYSQL 的 IF 函数
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • springMvc学习笔记(2)
  • windows下mongoDB的环境配置
  • 从0实现一个tiny react(三)生命周期
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 好的网址,关于.net 4.0 ,vs 2010
  • 我的面试准备过程--容器(更新中)
  • 写代码的正确姿势
  • 7行Python代码的人脸识别
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • ###项目技术发展史
  • #Linux(帮助手册)
  • #前后端分离# 头条发布系统
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (javascript)再说document.body.scrollTop的使用问题
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET建议使用的大小写命名原则
  • /boot 内存空间不够
  • @31省区市高考时间表来了,祝考试成功
  • @Bean注解详解
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Android]Android开发入门之HelloWorld
  • [Android学习笔记]ScrollView的使用