springboot sse流式响应
时间: 2025-04-28 09:28:42 浏览: 29
### 实现 Spring Boot 中的 SSE (Server-Sent Events) 流式响应
#### 准备环境
为了在 Spring Boot 应用程序中启用 Server-Sent Events 功能,需要确保项目的构建文件包含了必要的依赖项。对于 Maven 构建工具而言,应当引入 `spring-boot-starter-web` 依赖以支持 Web 开发特性[^1]。
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
#### 创建控制器类
定义一个新的 REST 控制器用于处理客户端发起的连接请求并返回事件流。此控制器需标注有 `@RestController` 注解以便被识别为一个 RESTful web service 组件。针对每条消息创建新的线程模拟异步行为向 EventSource 发送数据包[^2]。
```java
@RestController
public class SseController {
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> stream() {
return Flux.interval(Duration.ofSeconds(1))
.map(sequence -> "data: Message at time " + LocalDateTime.now());
}
}
```
上述代码片段展示了如何利用 Project Reactor 提供的 `Flux<T>` 类型作为方法返回值来表示无限序列的消息推送服务;其中 `.interval()` 方法用来设定每隔一秒触发一次事件生成逻辑,并通过映射操作符转换时间戳成为具体的文本信息输出给订阅者[^4]。
#### 前端部分
为了让浏览器能接收到这些由服务器主动推送给它的更新通知,在 HTML 页面里可以借助原生 JavaScript API —— `EventSource` 对象实例化对象并与指定 URL 地址建立持久化的 HTTP 连接监听来自远端的数据帧到达事件[^5]:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SSE Example</title>
<script type="text/javascript">
const eventSource = new EventSource('/stream');
eventSource.onmessage = function(event) {
console.log(`New message received from server: ${event.data}`);
};
</script>
</head>
<body>
</body>
</html>
```
这段简单的脚本实现了当页面加载完成后自动尝试打开到 `/stream` 路径下的长链接通道等待接收新到来的信息打印至控制台日志区域显示出来。
阅读全文
相关推荐


















