我在jhipster中遇到了JavaScript EventSource
问题。我在正常的Spring Boot应用程序中将EventSource
与Spring boot webflux一起使用。在那个项目中,当用户订阅/chat/subscribe
时,连接保持打开状态很长时间(我测试了30分钟)。我的Spring Boot应用程序不使用任何配置。但是,当我在jhipster应用程序中使用EventSource
时,恰好在两分钟内不活动后,连接关闭。我不知道jhipster在哪里设置配置。这是我的代码:
控制器:
@Controller
@RequestMapping("/api")
public class ChatResource {
@Autowired
@Qualifier("ptpReplayProcessor")
private ReplayProcessor<String> ptpReplayProcessor;
@GetMapping(value = "/chat/subscribe", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@ResponseBody
public Flux<String> subscribe() {
return Flux.from(ptpReplayProcessor);
}
}
ReplayProcessorConfig:
@Configuration
public class ReplayProcessorConfig {
@Bean("ptpReplayProcessor")
ReplayProcessor<String> ptpReplayProcessor() {
ReplayProcessor<String> replayProcessor = ReplayProcessor.create(0, false);
replayProcessor.subscribe(new BaseSubscriber<String>() {
@Override
protected void hookOnNext(String ptp) {
System.out.println("ptp replay processor called!");
}
});
return replayProcessor;
}
}
客户端(我的componenet的一部分):
....
this.source = new EventSource('http://localhost:9000/api/chat/subscribe');
this.source.onmessage = event => {
console.log(event);
};
this.source.onerror = event => {
console.log('error');
};
发送消息并调用ptpReplayProcessor.onNext(message)
时,浏览器将记录消息,一切正常。但是,如果我2分钟未发送任何消息,浏览器控制台将显示error
!。我想知道为什么这个问题只存在于jhipster中,而不存在于普通的spring boot应用程序中!
感谢您的关注。