繁体   English   中英

使用Python在MQTT中进行响应

[英]Responding in MQTT with Python

我的MQTT Python(v2.7)脚本中有一些延迟问题,这让我感到纳闷...

所以我有一台设备向另一台设备请求功能。 我们称它们为A和B。

因此,A发出MQTT消息以执行某项操作,而B则执行该功能。 我有A通过正常的发布方法发送出去。 这里没有问题。

B收到带有以下部分的已发布消息:

def on_message(client, userdata, msg):
    if msg.topic == "action":
            >> then do something here <<

在这里似乎也没有问题。 它获取消息并执行操作。

当我尝试报告运行情况时,问题就出现在这里,如下所示:

def on_message(client, userdata, msg):
    if msg.topic == "action":
            >> then do something here <<
            client.publish("report", payload=message1, qos=2, retain=False)
            >> then do some more action here <<
            client.publish("report", payload=message2, qos=2, retain=False)

问题不在于它既不执行该操作也不执行该操作,而是看起来它可以同时执行这两个操作,而是以一种非常奇怪的顺序进行,例如:

action
action
(several seconds wait)
message1
message2

这似乎不对吗? 在执行第二部分之前,如何使脚本发出消息?

这正在按预期方式工作。

网络循环是一个已经在处理传入消息的线程。 将发布排队,直到on_message函数完成,然后网络循环将处理这些排队的发布

TCP堆栈是异步的。 当您要求发送数据时,并不意味着它会立即消失。 您的代码后面有一个事件循环。 如果on_publish()顺序执行某项操作,则必须将顺序任务分成单独的函数,并在真正发出消息时在下一个on_publish()上调用它们。

我可以使用该库发送消息:

import paho.mqtt.publish as mqttc

并使用:

mqttc.single("report", payload=message1, qos=2, hostname=XXXX, port=XXXX)

这将遵循脚本的自然流程,并仍然发送消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM