SpringBoot SSE
时间: 2023-10-26 11:26:30 浏览: 120
Spring Boot SSE(Server-Sent Events)是一种服务器推送技术,用于实现服务器向客户端实时发送数据的功能。它基于HTTP协议,通过建立长连接,在服务器端有数据更新时,将数据主动推送给客户端。
在Spring Boot中使用SSE,可以通过创建一个控制器方法,返回类型为SseEmitter的对象。这个对象可以被用来发送事件和数据给连接的客户端。通过调用SseEmitter的send()方法,可以将数据推送给客户端。
以下是一个使用Spring Boot SSE的简单示例:
```java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@RestController
public class SSEController {
@GetMapping("/sse")
public SseEmitter sse() {
SseEmitter emitter = new SseEmitter();
// 在后台线程中持续发送数据给客户端
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
emitter.send("Data " + i);
Thread.sleep(1000);
}
emitter.complete(); // 完成发送
} catch (Exception e) {
emitter.completeWithError(e); // 发送错误
}
}).start();
return emitter;
}
}
```
在上述示例中,当访问`/sse`路径时,将会创建一个SseEmitter对象并返回给客户端。后台线程通过循环发送数据给客户端,并最后调用`complete()`方法标识发送完成。
客户端可以使用JavaScript的EventSource对象来接收SSE事件,如下所示:
```javascript
var eventSource = new EventSource('/sse');
eventSource.onmessage = function(event) {
console.log("Received data: " + event.data);
};
eventSource.onerror = function(event) {
console.error("Error occurred: " + event);
};
```
通过监听`onmessage`事件,客户端可以处理接收到的数据。`onerror`事件用于处理错误情况。
这就是使用Spring Boot SSE实现服务器推送的基本流程。通过这种方式,可以实现实时的数据更新和通知功能。
阅读全文