Spring MVC提供了SseEmitter
用来提供对W3C的SSE规范的支持。SSE是Server-Sent Events的缩写。HTML5 API 提供了EventSource
对象和服务端交互,服务端返回数据时头数据里的内容类型为:text/event-stream
。
我们的控制器的代码和ResponseBodyEmitter
的几乎差不多:
@RestController
@RequestMapping("/async")
@Slf4j
public class AsyncController {
private static Map<Long, SseEmitter> sseEmitterMap = new HashMap<>();
//可使用produces属性执行返回的头信息中的内容类型
@GetMapping(value = "/{id}/sse", produces = {
MediaType.TEXT_EVENT_STREAM_VALUE})
public SseEmitter sseEmitter(@PathVariable Long id){
SseEmitter emitter = new SseEmitter();
sseEmitterMap.put(id, emitter);
return emitter;
}
@GetMapping("/{id}/invoke-sse")
public void invokeSseEmitter(@PathVariable Long id