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

Springboot通过SSE实现实时消息返回

Server-Sent Events(SSE)是一种从服务器向客户端推送实时消息的技术。相较于WebSocket,SSE更为简单,适用于大多数实时消息场景。本文将深入探讨如何使用Spring Boot通过SSE实现实时消息返回。

一、什么是SSE

SSE是一种允许服务器通过HTTP协议向客户端发送实时更新的技术。客户端只需发送一个简单的HTTP请求,然后保持连接打开,服务器可以在任意时间推送消息。SSE适用于实时性要求高,但双向通信需求不强的场景,如实时股票行情、新闻推送等。

二、Spring Boot中使用SSE

在Spring Boot中实现SSE相对简单,只需通过Controller返回SSE的响应流即可。

1. 创建Spring Boot项目

首先,创建一个基本的Spring Boot项目,并添加必要的依赖。

pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
​
2. 编写Controller

接下来,创建一个控制器来处理SSE连接并推送实时消息。

SseController.java

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;@RestController
public class SseController {private final ExecutorService executorService = Executors.newCachedThreadPool();@GetMapping("/sse")public SseEmitter handleSse() {SseEmitter emitter = new SseEmitter();executorService.execute(() -> {try {for (int i = 0; i < 10; i++) {emitter.send("Message " + i, MediaType.TEXT_PLAIN);TimeUnit.SECONDS.sleep(1);}emitter.complete();} catch (IOException | InterruptedException e) {emitter.completeWithError(e);}});return emitter;}
}
​

上述代码创建了一个 /sse端点,当客户端连接到该端点时,服务器将通过SseEmitter对象每秒发送一条消息,共发送10条消息。

三、客户端实现

为了接收服务器推送的消息,客户端需要使用EventSource对象建立连接并处理接收到的消息。

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>SSE Demo</title>
</head>
<body><h1>Server-Sent Events Demo</h1><div id="messages"></div><script>const eventSource = new EventSource("/sse");eventSource.onmessage = function(event) {const messagesDiv = document.getElementById("messages");const message = document.createElement("div");message.textContent = event.data;messagesDiv.appendChild(message);};eventSource.onerror = function() {console.error("EventSource failed.");};</script>
</body>
</html>
​

在上述HTML文件中,使用 EventSource对象连接到 /sse端点,并通过 onmessage事件处理器显示接收到的消息。

四、SSE的优势与限制

优势
  1. 简单性:SSE基于HTTP协议,易于实现和维护。
  2. 自动重连:浏览器内置对SSE的支持,能够自动处理重连和断线恢复。
  3. 节省资源:SSE使用HTTP长连接,避免了轮询带来的资源浪费。
限制
  1. 单向通信:SSE仅支持服务器向客户端推送消息,不支持双向通信。
  2. 连接数限制:浏览器对每个域名的并发连接数有限制,SSE在大量客户端连接时可能受到影响。
  3. 不适合低延迟场景:对于需要超低延迟的应用场景,WebSocket可能更合适。

相关文章:

  • [原创](计算机数学)(The Probability Lifesaver)(P14): 推导计算 In(1-u) 约等于 -u
  • 得力DE-620K针式打印机打印速度不能调节维修一例
  • C++ std::find() 函数全解析
  • Spyglass:CDC官方Hands-on Training(三)
  • 服务器数据迁移终极指南:网站、数据库、邮件无缝迁移策略与工具实战 (2025)
  • A10服务器使用vllm推理框架成功运行Qwen3大模型
  • MCP 服务与 Agent 协同架构的理论基石:从分布式智能到生态化协作
  • YOLOV11改进策略【最新注意力机制】CVPR2025局部区域注意力机制LRSA-增强局部区域特征之间的交互
  • Android屏幕适配利器:Kotlin动态尺寸计算工具类完整封装
  • 矩阵:线性代数在AI大模型中的核心支柱
  • Kotlin-数组,集合类以及序列
  • SQLMesh Typed Macros:让SQL宏更强大、更安全、更易维护
  • 探索C++对象模型:This指针与(构造、析构)成员函数的深度解析(中篇)
  • iOS使用Metal对采集视频进行渲染
  • OpenHarmony外设驱动使用 (十三),Vibrator
  • Java桌面应用开发详解:自制截图工具从设计到打包的全流程【附源码与演示】
  • 2025年渗透测试面试题总结-匿名[社招]安全工程师(红队方向)2(题目+回答)
  • Linux(5)——再谈操作系统
  • 【AS32X601驱动系列教程】SMU_系统时钟详解
  • RNN GRU LSTM 模型理解
  • jsp ajax网站开发典型实例 pdf/百度开户返点
  • 网站使用cookies/简述网站推广的方式
  • 政府网站内容建设/微信拓客的最新方法
  • 广州网站开发技术/网站营销
  • 网站建设实训日志/泉州seo网站排名
  • 厦门成交型网站建设公司/抖音关键词排名查询工具