2016-04-21 2 views
0

Я видел несколько примеров данных датчика датчика paho, затем публикуя, например, https://github.com/jamesmoulding/motion-sensor/blob/master/open.py. Ничего, что я видел, начал сетевой цикл, как это предлагается в https://eclipse.org/paho/clients/python/docs/#network-loop. Мне интересно, не нужен ли сетевой цикл для публикации? Может быть, мне нужно только, если я подписался на что-то?Сетевая петля mqtt paho не нужна?

ответ

0

Петля сети необходима для целого ряда вещей:

  1. Чтобы справиться с поступающими сообщениями
  2. Чтобы отправить пинг-пакеты, необходимых для поддержания соединения живого
  3. Чтобы обработать дополнительные пакеты, необходимые для высокая QOS
  4. Отправляйте сообщения, которые занимают более одного сетевого пакета (например, больше, чем локальный MTU)

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

Учитывая вы можете запустить цикл сети в фоновом режиме в отдельном потоке в эти дни, я бы рекомендовал начать его независимо

0

Чтобы расширить то, что @hardillb сказал немного, его точка 2 «Для того, чтобы отправить пинг пакеты, необходимые для поддержания живого соединения ", является исключительно необходимым, если вы не публикуете со скоростью, достаточной для соответствия keepalive, которую вы устанавливаете при подключении. Другими словами, вполне возможно, что клиенту никогда не понадобится отправлять PINGREQ и, следовательно, никогда не нужно получать PINGRESP.

Однако, тем более важным является то, что невозможно гарантировать, что вызов publish() фактически завершит отправку сообщения без использования сетевого цикла. Он может работать некоторое время, но не может завершить отправку сообщения в любое время.

Следующая версия клиента позволит вам сделать это:

m = mqttc.publish("class", "bar", qos=2) 
m.wait_for_publish() 

Но это будет требует, что петля сети обрабатывается в отдельном потоке, так как с loop_start().

+0

Я буду использовать сетевой контур, как было предложено. Но также обратите внимание на то, что в Интернете есть много примеров, плавающих в Интернете (в учебниках и т. Д.), Которые не используют его. Наверное, еще не укусил людей. Удивительно, если по умолчанию должно быть запущено его и заставить людей отключить его вручную. Реверс того, что сейчас. – fickas

+0

Да, много людей, которые не читают документацию :(Я не собираюсь нарушать совместимость, изменяя поведение, это просто должно быть раздражающей случайной ошибкой для людей, которые не обрабатывают цикл. – ralight

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