尝试执行以下 springboot SSE 代码:
@Controller
public class DataActivityController {
@CrossOrigin
@RequestMapping(value="/sse/mvc/emitter")
public ResponseEntity<SseEmitter> handleRequest () {
final SseEmitter emitter = new SseEmitter();
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(() -> {
for (int i = 0; i < 1000; i++) {
try {
emitter.send(i + " - ", MediaType.TEXT_PLAIN);
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
emitter.completeWithError(e);
return;
}
}
emitter.complete();
});
return new ResponseEntity(emitter, HttpStatus.OK);
}
}
然后尝试使用以下方式从网络浏览器进行连接:
<script>
function sendRequest(){
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("http://localhost:8080/sse/mvc/emitter");
source.onmessage = function(event) {
document.getElementById("sseDiv").innerHTML += event.data + " - ";
};
} else {
document.getElementById("sseDiv").innerHTML =
"Your browser does not support server-sent events.";
}
}
</script>
在浏览器上显示的结果: "timeout":null} - {"timeout":null} - {"timeout":null} - {"timeout":null} - {"timeout":null} - {"timeout" :null} - {“超时”:null}。
但是在springboot应用中并没有显示错误。
您的脚本可能有问题。 SSE java代码似乎没问题。
SseEmitter emitter = new SseEmitter(-1L);
将此添加为发射器初始化语句。