У меня есть сервер, который поддерживает глобальное состояние приложения.
Клиенты могут подключаться к серверу и получать сообщения об изменениях в глобальном состоянии (механизм публикации/подписки, чтобы сервер мог транслировать информацию).
Однако при запуске у клиентов вообще нет информации о глобальном состоянии, а она им нужна. Я хочу, чтобы для любого нового клиента, подписывающегося на систему, первое уведомление было полным состоянием приложения. Затем они получают только изменения об этом состоянии:
- клиент подключается к системе обмена сообщениями
- он подписывается на систему обмена сообщениями
- первое сообщение, которое он получает, это полное состояние системы
- затем он получает только изменения о глобальном состоянии
Идея похожа на многопользовательскую игру, где новый игрок должен сначала получить полное состояние игры, а затем отправляются только изменения в игре.
Системы обмена сообщениями, такие как ActiveMQ или Stomp, прекрасно подходят для моих нужд, поскольку они многоязычны и могут использоваться с несколькими транспортными уровнями. Однако не существует понятия отправки полного состояния (или согласованного накопления последних изменений).
Конечно, я мог бы легко обеспечить это состояние статическим способом (сначала я получаю полное состояние, а затем подписываюсь на систему публикации/подписки), однако я должен быть осторожен с возможными изменениями в то же время (не потерял ли я некоторые изменения? при обработке полного состояния?Учтено ли это изменение в глобальном состоянии, которое я только что получил?...). Однако я теряю многоязычный/мультитранспортный аспект, уже обеспечиваемый Stomp и ActiveMQ.
Существуют ли какие-либо существующие библиотеки/инструменты для этого? Какие-то расширения для ActiveMQ? Что-то похожее на Стомп? Или нужно делать своими руками?