赞
踩
SseEmitter
是 Spring Framework 中用于服务器发送事件(Server-Sent Events, SSE)的类。SSE 是一种允许服务器推送更新到客户端的技术,通常用于实时更新的场景,如股票价格、实时消息、游戏状态等,又或者想要实现像ChatGPT那样的流式问答的效果。
以下是 SseEmitter
的一些关键点和使用方法:
确保你的项目中包含 Spring Web 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
创建一个 REST 控制器来处理 SSE 请求。
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.io.IOException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @RestController public class SseController { @GetMapping("/sse") public SseEmitter handleSse() { SseEmitter emitter = new SseEmitter(); ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(() -> { try { emitter.send("Hello at " + System.currentTimeMillis()); } catch (IOException e) { emitter.completeWithError(e); } }, 0, 1, TimeUnit.SECONDS); emitter.onCompletion(executor::shutdown); return emitter; } }
客户端可以使用 JavaScript 原生的 EventSource
对象来订阅事件。
<!DOCTYPE html> <html> <head> <title>SSE Example</title> </head> <body> <h1>SSE Example</h1> <div id="events"></div> <script> const eventSource = new EventSource('/sse'); eventSource.onmessage = function(event) { const newElement = document.createElement("div"); newElement.textContent = event.data; document.getElementById("events").appendChild(newElement); }; </script> </body> </html>
SseEmitter
实例:在服务器端控制器中,通过调用 new SseEmitter()
创建一个 SseEmitter
实例。SseEmitter
的 send
方法用于发送事件。IOException
,并通过 completeWithError
方法通知客户端连接终止。EventSource
对象订阅服务器推送的事件,并通过 onmessage
处理接收到的消息。SseEmitter
的生命周期,确保在连接完成、错误或超时时正确关闭。SseEmitter
提供了一种简洁高效的方法来实现服务器到客户端的实时数据推送,适合于许多实时应用场景。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。