长时间和后台保持通讯的有三种方式,分别是ajax的setInterval(),和websocket,已经SSE。
ajax长时间和合同保持通讯太占内存。
websocket可以进行服务端和后台双向通讯。
SSE只能进行服务器往前端单向传送数据。
服务端接口写法
import java.text.DecimalFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SSEController {
//produces = "text/event-stream;charset=UTF-8"一定要带上
@RequestMapping(value = "/get_data", produces = "text/event-stream;charset=UTF-8")
public String push() {
try {
Thread.sleep(1000);
}catch (Exception e) {
e.printStackTrace();
}
double moeny=Math.random()*10;
System.out.println(String.format("%.2f",moeny));
DecimalFormat df = new DecimalFormat(".00");
String canshu=df.format(moeny);
//!!!注意,EventSource返回的参数必须以data:开头,"\n\n"结尾,不然onmessage方法无法执行。
return "data:白菜价格行情:" + canshu+"元"+ "\n\n";
}
}
前端写法:
Insert title here//需要判断浏览器支不支持,可以去w3c进行查看
var source = new EventSource('/get_data');
source.onmessage = function (event) {
console.info(event.data);
document.getElementById('result').innerText = event.data
};