Controller
@RestController
public class SseController {
//输出媒体类型text/event-stream,服务器端SSE的支持
@RequestMapping(value = "push",produces = "text/event-stream")
public String push(){
Random random = new Random();
try {
Thread.sleep(5000);//没5s推送一个
}catch (InterruptedException e){
e.printStackTrace();
}
return "data:Testing 1,2,3"+random.nextInt()+"\n\n";
}
}
页面+js
<div id="msgFromPush"></div>
<script type="text/javascript" src="/assets/js/jquery-1.7.1.js"></script>
<script type="text/javascript">
if (!!window.EventSource){//1EventSource只有新式浏览器才有Chrome、Firefox等
// EventSource是SSE的客户端
var source = new EventSource('push');
var s='';
//添加SSE客户端监听,在此获得服务器端推送的通知
source.addEventListener('message',function (e) {//2
s += e.data+"<br/>";
$("#msgFromPush").html(s);
});
source.addEventListener('open',function (e) {
console.log("连接打开");
},false);
source.addEventListener('error',function (e) {
if (e.readyState == EventSource.CLOSED){
console.log("连接关闭");
}else {
console.log(e.readyState);
}
},false);
}else {
console.log("你的浏览器不支持SSE");
}
</script>