我正在构建一个 API,利用 Spring MVC 中的 SSE 来传输数据。我尝试使用 Spring WebFlux 构建 SSE,并且能够让它工作并异步传输数据。但是当我尝试在 Spring MVC 中使用 SseEmitter 时,我无法传输数据。
数据在最后一个事件结束时立即发送,这违背了 SSE API 的要点。我尝试使用在线提供的示例使用简单的 SSE API,但无法让它们工作。
@GetMapping(value = "/test", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter testSSe(){
SseEmitter emitter = new SseEmitter();
for(int i = 1; i < 5; i++)
{
int iInLoop = i;
try {
Thread.sleep(iInLoop * 1000);
emitter.send(iInLoop );
}catch (Exception e){
e.printStackTrace();
}
}
emitter.complete();
return emitter;
}
所有事件同时发出。一旦事件由发射器发送,如何让 SSE 立即发送事件?
请求线程或主线程不应该被阻塞。它必须能够首先返回发射器才能发送事件。
因此,应该从另一个线程发送事件,同时应允许主(请求)线程完成返回发射器。