SSE(Server-Sent Events)由浅入深

一、什么是SSE(Server-Sent Events)

服务器发送事件( SSE ) 是一种服务器推送技术,使客户端能够通过 HTTP 连接从服务器接收自动更新,并描述了服务器如何在建立初始客户端连接后启动向客户端的数据传输。它们通常用于向浏览器客户端发送消息更新或连续数据流,旨在通过名为 EventSource 的 JavaScript API 增强本机跨浏览器流式传输,客户端通过该 API 请求特定的 URL 以接收事件流。EventSource API已由WHATWG标准化为HTML Living Standard 的一部分。SSE的媒体类型text/event-stream

二、SSE(Server-Sent Events)的使用

2.1、SSE简单使用

简单代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@RestController
@Slf4j
@RequiredArgsConstructor
public class SseController {

private final ExecutorService nonBlockingService = Executors.newCachedThreadPool();

@GetMapping("/sse/sse-emitter")
public SseEmitter getSseEmitterSseStream() {
SseEmitter emitter = new SseEmitter();

nonBlockingService.execute(() -> {
// 这里模拟数据发送给客户端的逻辑
try {
for (int i = 0; i < 10; i++) {
emitter.send("Data: " + i);
Thread.sleep(1000);
}
emitter.complete();
} catch (Exception ex) {
emitter.completeWithError(ex);
}
});
return emitter;
}

@GetMapping(value = "/sse/flux", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> getFluxSseStream() {
// 使用Flux生成每秒一个递增的数据流,用于模拟实时数据推送
return Flux.interval(Duration.ofSeconds(1))
.map(sequence -> "Data: " + sequence);
}

}