Spring/Spring Boot服务端主动推送技术【server send event】简称sse,看完不亏系列
Server-Sent Events(SSE)是一种服务器向浏览器推送数据的技术。SSE 使用 HTTP 协议,保持客户端与服务器之间的连接,并允许服务器向客户端推送更新。
在 Spring Boot 中,你可以使用 SseEmitter
来实现服务端推送。以下是一个简单的例子:
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("/stream")
public SseEmitter handleSse() {
SseEmitter emitter = new SseEmitter();
// 在新线程中发送事件
new Thread(() -> {
try {
for (int i = 0; i < 5; i++) {
emitter.send("data:" + i + "\n\n"); // 发送数据
Thread.sleep(1000); // 每秒发送一次
}
emitter.complete(); // 完成发送
} catch (Exception e) {
emitter.completeWithError(e); // 发送异常
}
}).start();
return emitter;
}
}
在这个例子中,我们创建了一个 /stream
端点,它返回 SseEmitter
对象。在新线程中,我们发送一个简单的数字流,每秒更新一次,并通过发送 \n\n
结束每个事件。当我们完成发送事件时,我们可以调用 complete()
或 completeWithError()
方法来关闭连接。
客户端可以通过以下方式接收这些事件:
var source = new EventSource('/stream');
source.onmessage = function(event) {
console.log(event.data);
};
source.onerror = function(event) {
console.error("EventSource failed.");
};
这个 JavaScript 代码创建了一个 EventSource
对象,连接到我们的服务端 /stream
端点,然后处理接收到的消息和错误。
评论已关闭