【问题标题】:paho-mqtt subscribe check subscription statuspaho-mqtt subscribe 检查订阅状态
【发布时间】:2017-06-29 08:58:51
【问题描述】:

我在python2.7中使用paho-mqtt 1.2在订阅特定主题后收听经纪人广播的消息。

它的初始化是这样的

import paho.mqtt.client as mqtt    #python mqtt package

# initialize MQTT client
mqttc = mqtt.Client()

# register listener functions    
mqttc.on_connect   = on_connect
mqttc.on_subscribe = on_subscribe
mqttc.on_message   = on_message

# connect to MQTT broker
mqttc.connect(<IP>, <PORT>, <KEEPALIVE_INTERVAL>)

# subscribe a topic to the broker
subscr = mqttc.subscribe(<TOPIC_NAME>, 0)

使用自定义函数

def on_connect(client, userdata, flags, rc):
    print "connected"

def on_subscribe(client, userdata, mid, granted_qos):
    print "subscribed"

def on_message(client, userdata, msg):
    print "message received"

从 API 我可以了解 subscribe() 函数

函数返回一个元组(result, mid),其中result为 MQTT_ERR_SUCCESS 表示成功或 (MQTT_ERR_NO_CONN, None) 如果 客户端当前未连接。 mid 是消息的 ID 订阅请求。中间值可用于跟踪订阅 通过检查 on_subscribe() 中的 mid 参数来请求 如果已定义,则回调。

我现在正在尝试检索有关订阅的状态,即如果我订阅了 VALID 主题。据我了解,如果主题格式无效,则 subscribe() 函数只会返回错误代码。但如果我订阅了一个实际广播的主题,我想提取信息。

到目前为止,我收到了一个包含订阅 ID 的 on_subscribe() 调用,无论我订阅的是哪个主题(有效或无效)。

【问题讨论】:

    标签: python-2.7 mqtt paho


    【解决方案1】:

    您始终可以订阅所有(语法正确的)主题,因为将来可能会向其发布消息。

    在 MQTT 中,无需在使用前声明主题,代理将允许您订阅消息从未(并且可能永远不会)发布消息的主题。

    主题仅在消息发布到该主题时才有效。

    了解实际使用的主题的唯一方法是订阅它们并查看是否出现消息。

    【讨论】:

    • 所以这意味着如果我有一个主题,它每天只广播一次消息,并且我的主题订阅有错字,我不会在一天内注意到这一点?
    • 假设一个没有持久订阅的新客户端并且在没有设置保留标志的情况下发布消息,那么您只会在发布时收到消息
    • 由于我只配置监听器,而不是代理,我不知道retained=True 选项,但这肯定会让我处理这个问题,谢谢!
    • 保留标志是已发布消息的属性,而不是您在代理上配置的内容
    • 好的,但这仍然意味着我作为侦听器不能配置这个(既不能配置代理,也不能配置消息的发布方式),对吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多