У меня есть простое приложение Java Spring, которое использует отправленные сервером события для отправки данных во внешнее приложение React.Вот как написан сервер:
@GetMapping(value = "/plot", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux get() {
return Flux.interval(Duration.ofMillis(1000))
.map(interval ->
currentStateMapper.map(eventRepository.getAll()).stream()
.map(plotDataMapper::map)
.collect(Collectors.toList())
);
}
Возможно, это менее важно, но идея в том, что я сохраняю последние события, а репозиторий передает мне все сохраненные события (они хранятся вкэш бесконечности), а затем я использую некоторые средства отображения, чтобы получить текущее состояние, а затем сопоставить его с объектами, подходящими для визуализации с помощью графика XY.
Он должен отправлять сообщение с данными построения на веб-интерфейс каждую секунду.И когда я открываю конечную точку с помощью своего браузера (Chrome), он работает как шарм.может видеть новый JSON, появляющийся каждую секунду.Но когда я использую источник событий React для получения сообщений вместо 1 сообщения каждую секунду, я получаю 6 одинаковых сообщений каждую секунду.Вот реализация веб-интерфейса:
const Component = () => {
const plotDataEventSource = new EventSource(
"http://localhost:8080/tags/plot/antenna"
);
useEffect(() => {
plotDataEventSource.onmessage = e => {
console.error(e)
setData(prevState => {
/* some data handling */
return newState;
});
};
});
return ( /* html with plot */ );
}
И поэтому console.error () регистрируется 6 раз в секунду, идентичные объекты.В чем может быть причина такого поведения?