springboot实战——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;
import java.io.IOException;
@RestController
public class SseController {
@GetMapping(path = "/stream-sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter handleSse() {
SseEmitter emitter = new SseEmitter();
// 在新线程中发送事件,以避免阻塞主线程
new Thread(() -> {
try {
// 发送事件
emitter.send("event1");
// 发送事件,并指定事件类型
emitter.send("event2", MediaType.TEXT_PLAIN);
// 在发送完所有事件后,调用complete()方法结束流
emitter.complete();
} catch (IOException e) {
// 发送异常处理逻辑
emitter.completeWithError(e);
}
}).start();
return emitter;
}
}
这段代码创建了一个REST控制器,提供了一个端点/stream-sse
,该端点使用SSE(Server-Sent Events)向客户端推送事件流。在新线程中,我们发送了两个事件,并在完成所有事件后,通过调用complete()
或completeWithError()
方法结束事件流。这是实现服务端推送的一个简单例子。
评论已关闭