【问题标题】:Paho MQTT client connection reliability (reconnect on disconnection)Paho MQTT 客户端连接可靠性(断开连接时重新连接)
【发布时间】:2016-02-23 15:01:58
【问题描述】:

使用 Python Paho MQTT 客户端最可靠的方法是什么?我希望能够处理由于 WiFi 掉线而导致的连接中断,并继续尝试重新连接,直到连接成功。

以下是我所拥有的,但有没有我不遵守的最佳做法?

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()

【问题讨论】:

    标签: python mqtt paho


    【解决方案1】:
    1. 设置一个client_id,使其在重新连接时相同
    2. 设置 clean_session=false 连接选项
    3. 以大于 0 的 QOS 订阅

    这些选项将有助于确保在断开连接时发布的任何消息都将在连接恢复后传送。

    你可以在构造函数中设置client_id和clean_session标志

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

    并在主题后设置订阅的QOS

    client.subscribe(topic, qos=1)
    

    【讨论】:

    • 我没有看到在断开连接和 2 分钟后重新连接后重新连接工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多