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 () { return Flux.interval(Duration.ofSeconds(1 )) .map(sequence -> "Data: " + sequence); } }