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