如何在继续程序之前编写一个等待来自MQTT的消息的函数?

时间:2016-05-07 16:12:07

标签: python mqtt

我正在尝试使用publish.single发送消息,然后接收消息并根据收到的数据采取行动。因此,除非我从服务器收到一些东西,否则我无法继续,所以有没有办法在继续之前编写一个等待来自MQTT的消息的语句?

示例代码:

publish.single("$topic", data, ip_address)
#can't do anything here 
receive(data_from_broker) #or anythin that looks like it!
#continue with the program here 

1 个答案:

答案 0 :(得分:2)

简短的回答是你没有。

至少不是你所描述的方式。 MQTT是一种异步协议,没有发送消息和等待响应的意识,发布客户端无法知道是否有0,1或n个订阅客户端监听消息发布的主题。

您需要构建一个名为state machine的内容,以跟踪收到邮件时您在程序流程中的位置。

e.g。

  1. 应用程序发布消息并在状态机中设置标志以说明消息已发送
  2. 远程客户端接收消息并发布响应
  3. 第一个客户端收到新消息,它会检查状态机以确定该消息应被视为对原始消息的响应。
  4. 要订阅主题,您必须继续使用publish.single到完整的MQTT客户端,这样您就可以设置onMessage回调来处理传入的消息。