SpringMVC的SseEmitter实时推送

SseEmitter简介:SpringMVC提供的一种技术,可以实现服务端向客户端实时推送数据的功能

用法:在Contorller中提供一个接口,返回SseEmitter对象,发送数据可以在另一个接口调用其send方法发送数据,SpringBoot已经集成这个功能

用法示例:


@RestController
public class SseEmitterTestController {
    private SseEmitter sseEmitter;

    /**
     * 步骤一:请求后浏览器会阻塞,直到close后结束阻塞
     */
    @RequestMapping("start")
    public SseEmitter start() {
        //默认是30s超时,设置为0L永不超时
        sseEmitter=new SseEmitter(0L);
        //将这个对象返回
        return sseEmitter;
    }

    /**
     * 步骤二:请求后会像浏览器发送数据,可以多次请求
     */
    @RequestMapping("send")
    public String  send() {
        if (sseEmitter!=null){
            try {
                sseEmitter.send(new Date());
                return "send seccuss";
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "send fail";
    }

    /**
     * 步骤三:请求后会结束对浏览器的阻塞,结束数据发送
     */
    @RequestMapping("close")
    public String  close() {
        if (sseEmitter!=null){
            sseEmitter.complete();
            return "close";
        }
        return "close fail,sseEmitter is null";
    }
}