2017-06-29 229 views
0

我在Python2.7中使用paho-mqtt 1.2来收听代理在订阅特定主题后广播的消息。paho-mqtt订阅支票订阅状态

它初始化像

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我可以阅读有关认购()函数

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

我现在试图检索有关订阅的状态,即如果我订阅了VALID主题。在我的理解中,如果主题的格式无效,则subscribe()函数仅返回错误代码。但是我想提取信息,如果我订阅了实际播出的话题。

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

回答

1

您可以随时订阅所有(语法正确)的主题,因为可能会在将来的某个时间发布消息。

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

只有当消息发布到该主题时,主题才有效。

要知道哪些主题实际上正在使用的唯一方法是订阅它们并查看是否有消息出现。

+0

所以这意味着如果我有一个话题,每天只发送一次消息,而且我的话题订阅有一个错字,我不会注意到这一天? – HeXor

+1

假设没有持久订阅的新客户端和消息正在发布而没有设置保留标志,那么只有在发布消息时才会收到该消息 – hardillb

+0

由于我只配置了监听者,而不是代理,所以我不知道'retain = True'选项,但是这肯定会给我一个处理这个问题的方法,谢谢! – HeXor