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