SSE协议SpringBoot
时间: 2025-05-14 20:02:24 浏览: 23
### Spring Boot 中实现 SSE (Server-Sent Events) 协议
#### 前提条件
为了在 Spring Boot 应用程序中实现 SSE 功能,需要确保项目已引入必要的依赖项。通常情况下,默认的 `spring-boot-starter-web` 已经包含了支持 HTTP 流的功能。
---
#### 配置与代码示例
以下是基于 Spring Boot 和 SSE 的具体实现方法:
1. **创建控制器类**
创建一个用于处理 SSE 请求的控制器类,并定义返回事件流的方法。
```java
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.concurrent.atomic.AtomicLong;
@RestController
public class SseController {
private final AtomicLong counter = new AtomicLong();
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamEvents() {
return Flux.interval(Duration.ofSeconds(1)) // 设置每秒触发一次
.map(sequence -> "Event at time: " + LocalDateTime.now());
}
}
```
此代码片段实现了 `/stream` 接口[^2],它会以每秒一次的频率向客户端发送当前时间戳作为事件数据。
2. **前端 HTML 页面**
客户端可以通过 JavaScript 轻松接收来自服务器的 SSE 数据流。
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SSE Example</title>
</head>
<body>
<h1>Server Sent Event Demo</h1>
<div id="events"></div>
<script type="text/javascript">
const eventSource = new EventSource('/stream');
eventSource.onmessage = function(event) {
const newElement = document.createElement("p");
newElement.textContent = "New message: " + event.data;
document.getElementById('events').appendChild(newElement);
};
</script>
</body>
</html>
```
该页面通过建立 `EventSource` 对象连接到后端接口并显示接收到的数据[^3]。
---
#### 特性和优势
SSE 是一种单向通信机制,允许服务器持续不断地向客户端推送更新信息。相比 WebSocket 或轮询技术,其主要优点在于更轻量级的设计以及较低复杂度的支持环境配置需求[^1]。
---
#### 可能遇到的问题及解决办法
如果发现某些浏览器无法正常工作或者断开重连失败等问题,则需确认以下几点设置是否正确:
- 确认服务端响应头 Content-Type 是否被设定为 `"text/event-stream"`;
- 检查网络状态是否存在超时现象,适当调整 keep-alive 时间参数。
---
阅读全文
相关推荐


















