服务器推送
ajax 轮询 不建议
- websocket 多用于双方复杂数据通讯
- sse (server send event) 服务器主动推送
- h5 新标准
- 本质是保持一个 http 长连接,轻量级协议
sse 使用
<body>
<script>
var source = new EventSource("http://127.0.0.1:8080/sse/getInfo");
source.onmessage = function (ev) {
console.log(ev.data);
}
</script>
</body>
- server 端
- 注意 返回的数据格式必须为下面这种格式,"data:"+你的数据+"
"; "data"还有其他的格式, “data”, “event”, “id”,“retry”
@RestController
@RequestMapping("/sse")
public class SSEController {
@CrossOrigin
@RequestMapping(value = "/getInfo", produces = "text/event-stream;charset=UTF-8")
public String push(){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 返回的数据格式必须为下面这种格式,"data:"+你的数据+"
"; "data"还有其他的格式, “data”, “event”, “id”, “retry”
// 不然onmessage方法无法执行。
return "data:pushing: " + String.valueOf(System.currentTimeMillis()) + "
";
}
}