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("瀏覽器不支持");
        }

 

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