Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程
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;
@RestController
public class SseController {
@GetMapping(path = "/stream-sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter handleSse() {
SseEmitter emitter = new SseEmitter();
// 在新线程中发送事件,以避免阻塞主线程
new Thread(() -> {
try {
// 模拟数据源
List<String> events = getEvents();
for (String event : events) {
emitter.send(createSseMessage(event));
}
// 完成发送
emitter.complete();
} catch (Exception e) {
// 发送错误
emitter.completeWithError(e);
}
}).start();
return emitter;
}
private List<String> getEvents() {
// 模拟获取事件数据
return Arrays.asList("event1", "event2", "event3");
}
private SseEvent createSseMessage(String event) {
return SseEventBuilder.keepOpen(event).id(UUID.randomUUID().toString()).reconnectTime(10000L);
}
}
这个代码示例展示了如何在Spring Boot应用中使用SseEmitter
来实现服务端发送事件(SSE)。通过创建一个新的线程来模拟一个数据源,并且周期性地发送事件到客户端。每个发送的事件都被设置了唯一的ID和重连时间,以确保客户端可以正确地处理连接断开的情况。
评论已关闭