2016-02-23 5 views
3

Что является самым надежным способом использования Python Paho MQTT-клиента? Я хочу иметь возможность обрабатывать прерывания соединения из-за падения WiFi и продолжать пытаться повторно подключиться, пока это не будет успешным.Надежность подключения клиента Paho MQTT (повторно подключиться к отключению)

У меня есть следующее, но есть ли какие-либо лучшие практики, к которым я не придерживаюсь?

import argparse 
from time import sleep 

import paho.mqtt.client as mqtt 


SUB_TOPICS = ("topic/something", "topic/something_else") 
RECONNECT_DELAY_SECS = 2 


def on_connect(client, userdata, flags, rc): 
    print "Connected with result code %s" % rc 
    for topic in SUB_TOPICS: 
     client.subscribe(topic) 

# EDIT: I've removed this function because the library handles 
#  reconnection on its own anyway. 
# def on_disconnect(client, userdata, rc): 
#  print "Disconnected from MQTT server with code: %s" % rc 
#  while rc != 0: 
#   sleep(RECONNECT_DELAY_SECS) 
#   print "Reconnecting..." 
#   rc = client.reconnect() 


def on_msg(client, userdata, msg): 
    print "%s %s" % (msg.topic, msg.payload) 


if __name__ == "__main__": 
    p = argparse.ArgumentParser() 
    p.add_argument("user") 
    p.add_argument("password") 
    p.add_argument("host") 
    p.add_argument("--port", type=int, default=1883) 
    args = p.parse_args() 

    client = mqtt.Client() 
    client.on_connect = on_connect 
    client.on_message = on_msg 
    client.username_pw_set(args.user, args.password) 
    client.connect(args.host, args.port, 60) 
    client.loop_start() 

    try: 
     while True: 
      sleep(1) 
    except KeyboardInterrupt: 
     pass 
    finally: 
     client.loop_stop() 
+0

Привет, Я пытаюсь реализовать это на Django сервер. Проблема, с которой я сталкиваюсь, заключается в том, что клиент MQTT на сервере перестает отвечать на запросы после того, как возникло какое-либо исключение. Не могли бы вы помочь мне с этим! –

ответ

3
  1. Установите client_id так это то же самое через воссоединяется
  2. Установите параметр clean_session = ложь соединения
  3. Подписаться на QOS больше 0

Эти варианты будут способствовать тому, что любой сообщения, опубликованные в отключенном состоянии, будут доставлены после восстановления соединения.

Вы можете установить флаг client_id и clean_session в конструкторе

client = mqtt.Client(client_id="foo123", clean_session=False) 

И установить QOS подписки после темы

client.subscribe(topic, qos=1) 

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

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