Обработка событий между Spring boot и Reactjs

#java #reactjs #spring #events #corda

#java #reactjs #spring #Мероприятия #corda

Вопрос:

Это может показаться простым решением, найденным в Интернете, но, поверьте мне, я просмотрел множество примеров и не мог понять, какой подход выбрать.

Требование: у меня есть подписчик на конце службы приложений (spring boot / Java), подписанный на события блокчейна (corda). Я хочу передавать это событие в пользовательский интерфейс (ReactJS) всякий раз, когда происходит изменение состояния.

Я мог бы успешно подписаться на события блокчейна, но застрял с несколькими незавершенными или запутанными идеями о том, как перенести его в пользовательский интерфейс и как пользовательский интерфейс будет получать мои события (пожалуйста, не предлагайте платные сервисы, API, библиотеки и т. Д.).

Я столкнулся и опробовал все подходы, поскольку я недавно работаю над событиями, мне нужен какой-то луч света относительно того, как подойти к полному решению.

  1. Шаблон издатель-подписчик
  2. Наблюдаемый шаблон
  3. Эмиттер Sse
  4. Поток и моно
  5. Firebase (явное НЕТ)

Boggler :

  1. обработка событий между сервисом и пользовательским интерфейсом, должна ли она осуществляться через вызовы API / endpoint или может быть передана только в air (я не совсем понимаю), и на основе имени события мы можем подписаться на него в пользовательском интерфейсе?
  2. должен ли я иметь два API, предназначенных для этого? один триггер подписывается, а другой фактически выполняет эмиттер?
  3. Если конечная точка всегда прослушивается, разве ей не нужен выделенный ресурс?

Мне в принципе нужен ЧЕТКИЙ подход к решению этой проблемы.

Код может быть предоставлен по требованию

Комментарии:

1. 1,2 и 4 — это в основном 3 или через websockets. То, как вы работаете на сервере, не обязательно меняет то, как вы работаете на клиенте.

2. Не эксперт по реакции, но, пожалуйста, взгляните на этот пример из устаревшего репозитория samples; он использует React для интерфейса; возможно, вы найдете там ответы.

Ответ №1:

Я вижу, вы упомянули, что можете фиксировать события в Spring Boot. Таким образом, вам остается отправить информацию о событии во внешний интерфейс. Я мог бы придумать три способа сделать это.

  • Websockets: может быть чрезмерным, так как я полагаю, вам не понадобится двунаправленная связь.
  • СМОТРИТЕ: Возможно, лучший выбор, чем WebSockets.
  • Или просто опрос: тоже неплохой выбор, если вы не ищете уведомления в реальном времени.

Ответ №2:

Да, длительный опрос.

Решение кажется довольно простым. Установите соединение один раз и дайте им подождать как можно дольше. Так что в то же время, если какие-либо новые данные поступают на сервер, сервер может напрямую вернуть ответ. Таким образом, мы можем определенно сократить количество запросов и задействованных циклов ответа.

В Интернете вы найдете множество примеров реализации того, как долго выполняется опрос в рамках проекта Spring Boot.