Java服务端推送--SSE

1、java代码:


    @GetMapping(value="/message", produces = "text/event-stream;charset=utf-8")
    public String sendMessage(){
    	try {
            Thread.sleep(1000); //线程休眠1秒
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        //实时消息推送
        StringBuilder builder = new StringBuilder();
 
        builder.append("data: hello world" + DateUtils.getTime() + " \n\n");//消息数据
        builder.append("id: 1916\n\n"); //事件id
        /**  
         * 消息事件
         * 如果不设置event字段,则客户端触发默认事件类型message。
         * 如果设置,则客户端触发事件类型为event字段对应设置的值。
         */
        builder.append("event: sseMessage\n\n");//消息事件
        builder.append("retry: 10000\n\n");//设置连接超时时间 毫秒
        builder.append("\n\n");//该事件类型结束,不同数据类型之间用\n\n(隔一行)来区分
 
        System.out.println(builder.toString());
        
        return builder.toString();
    }

2、js代码


        if (!!window.EventSource) {
            var event = new EventSource(ctx + "/test/user/message");

            event.addEventListener('message', function(t) {
                var data = t.data;
                document.write(data+"<br/>")
            });

            event.addEventListener("open",function (t) {
                console.log("开启");
            },false);

            event.addEventListener("error",function (t) {
                if (t.readyState  == EventSource.CLOSED) {
                    console.log("关闭");
                }
            },false);

        } else{
            console.error("浏览器不支持");
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章