2016-06-17 7 views
0

Как определить, был ли успех publishtopic. Есть ли способ получить подтверждение при публикации в теме.Подтверждение при публикации - MQTT

В случае отсутствия связи в течение publish между клиентами (Издатель/Подписчик) как справиться с этим.

Я не хочу, чтобы подписчик отправил ответ на конкретную тему в конце публикации после получения pay_load.

Вот мой рубиновый код:

Предположим, я создал клиентов (@client) и настроены с обеих сторон.

Публикация

def publish_it 
    @client.publish('test/hai', 'message') 
    # Ack the publish 
end 

Подписка

@client.subscribe('test/#') 

@client.get do |topic,message| 
    puts "#{topic}: #{message}" 
end 

ответ

2

Там нет конца до конца (издатель абонента) уведомления о доставке в MQTT. Это связано с тем, что в качестве протокола pub/sub нет возможности издателю узнать, сколько подписчиков есть в данной теме, может быть что угодно от 0 до n.

Уровни QOS, встроенные в спецификацию, обеспечивают доставку сообщений от издателя до брокера (а затем от брокера к подписчикам). Если вы хотите, чтобы сообщение доставляется затем использовать либо QOS уровня 1 или 2.

QOS 1 обеспечит сообщение доставляется по крайней мере один раз (возможно больше, если есть проблемы с сетью)

QOS 2 обеспечит сообщение доставляется только один раз.

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

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