我在Spring-Boot中有一个Rest API,在这里我像这样监听来自html
的事件源流:
eventSource = new EventSource("/api/events/receive", {
xhrHeaders: {
'Content-Type': 'text/event-stream',
'Connection': 'keep-alive'
}
});
eventSource.onmessage = function (evt) { ... };
一段时间后,EventSource返回503!
在本地主机上完美运行,但在远程主机上不是!
@RestController
对象在HttpServletResponse
上添加保持活动状态@GetMapping(path = "/api/events/receive", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Ambulance> receiveAmbulance(HttpServletResponse resp) {
resp.addHeader("Connection", "keep-alive");
return Flux.create(sink -> {
ambulanceProcessor.register(sink::next);
});
}
keep-alive
将@Controller
标头添加到该模板@GetMapping("/dashboard")
public String getResource(Model model, HttpServletResponse response) {
response.addHeader("Connection", "keep-alive");
return "view";
}
注意:我已经尝试了几乎所有内容,但似乎没有任何效果...
答案 0 :(得分:1)
我通过使用此@Service
创建新的@Bean
@Bean
public void KeepAliveEvt()
{
ExecutorService sseMvcExecutor = Executors.newSingleThreadExecutor();
sseMvcExecutor.execute(() -> {
try {
for (int i = 0; true; i++) {
Thread.sleep(120000);
ambulanceProcessor.process(new Event());
System.out.println("Kept Alive");
}
} catch (Exception ex) {
}
});
}
基本上,我每2分钟进行一次虚拟事件,使其保持活力