mqtt: как обеспечить полное состояние сообщения, за которым следуют дельты - PullRequest
0 голосов
/ 02 октября 2018

Рассматривая mqtt как средство публикации сообщений для клиентов браузера через веб-сокеты.

Скорее всего, данные будут выглядеть как объект JSON, чьи поля со временем меняют значения.Я хотел бы отправить только эти изменения, а не все состояние JSON с каждым сообщением.

Есть ли в протоколе встроенный способ (или какой-то другой обходной путь), который может позволить клиентам получатьполное состояние соединения, за которым следуют только дельта-сообщения?

Одним из возможных решений проблемы было бы сохранение полного состояния в отдельной теме с установленным флагом retain, на который мы подпишемся сразу после установления соединенияс последующим удалением после получения сообщения.Но тогда мы все равно столкнулись бы с проблемой упорядочения сообщений - нет никакой гарантии, что сообщения по разностной теме следуют за последним состоянием в ожидаемом порядке.Плюс к этому накладные расходы на первоначальную подписку на 2 темы для каждой заинтересованной организации вместо одной.

1 Ответ

0 голосов
/ 02 октября 2018

Нет, в MQTT нет ничего, что сделало бы это для вас.

Наилучший подход, вероятно, состоит в том, чтобы сначала доставить большую полезную нагрузку через HTTP, затем создать тему для каждого поля в структуре и публиковать обновления.к каждой теме.Если вы добавляете временную метку к каждому обновлению, вы также можете ставить временные метки на полные данные, чтобы подписаться на обновления до того, как вы загрузите полный объект.Если вы также отметили это время, вы можете сначала подписаться на обновления и применить необходимые обновления, как только вы получите все.Это позволит решить проблему с обновлениями во время загрузки большого объекта.

...