2016-09-01 14 views
2

Я изучаю протокол MQTT и кажется, что есть противоречие в первых строках спецификации:Какова польза/цель MQTT QoS?

Протокола работает над TCP/IP, или по сравнению с другими сетевыми протоколами, которые обеспечивают упорядоченные, без потерь, двунаправленные соединения. Его особенность включает в себя:

[...]

Три качества сервиса для доставки сообщения:

  • «В самый раз», где сообщения доставляется в соответствии с лучшими усилиями рабочей среды. Потеря сообщений может произойти. Этот уровень может использоваться, например, с данными датчиков окружающего датчика , где не имеет значения, будет ли потеряна отдельная цифра , поскольку следующая будет опубликована вскоре после этого. ·
  • «В наименее один раз», где сообщения могут быть получены, но дубликаты могут быть получены . ·
  • «Ровно один раз», где сообщение должно быть получено ровно один раз. Этот уровень может использоваться, например, с биллинговыми системами , где дублирующиеся или потерянные сообщения могут приводить к неправильным тарифам .

Если MQTT может работать только через сетевые протоколы, которые без потерь, в чем смысл предоставления потерями уровня QoS (уровень 0)?

Я считаю, что даже представить это невозможно, поскольку протокол TCP позаботится о повторной передаче потерянных сообщений. Это имело бы смысл для MQTT-SN, который предназначен для запуска более не-TCP, ненадежных сетей.

(примечание: «Уровень 1» хотя бы один раз «не имеет смысла при использовании протокола TCP либо потому, что TCP уже включает эту гарантию, но может иметь смысл в более общем случае, поскольку спецификация говорит, что другой протокол без потерь может быть используется)

ответ

5

Строго говоря, кадр TCP, подтверждающий уровень TCP/IP, не обязательно означает, что на уровне приложения фактически было выполнено все, что необходимо сделать с пакетом.

В случае потерянного пакета QQS QQS 0, что может случиться, так это то, что TCP-пакет делает его брокеру (т.е. действительно ACK'd с клиентской точки зрения), но брокер падает в середине предоставления сообщения всем подписанным клиентам.

Скажите, что у вас 100 000 клиентов, подписавшихся на тему MQTT - пересылка данных подписчикам требует времени, и брокер может умереть в середине процесса. С точки зрения издателя сообщение действительно было опубликовано брокеру, но действительно есть потеря сообщений, так как некоторые подписчики никогда не узнают об этом сообщении.

 Смежные вопросы

  • Нет связанных вопросов^_^