【发布时间】:2019-09-11 02:36:46
【问题描述】:
我正在编写一个需要通过 mqtt 发送消息的 python 项目。我发现一个问题,当我发送一个需要订阅者下载一个需要花费几分钟的大文件的订单时,订阅者再次调用 on_connect 函数,此时订阅者无法收到它订阅的任何消息。这个错误偶尔会发生。
经过多次测试,我发现ss下载大文件后只要调用on_connect函数,订阅者就收不到其他消息了。 并且订阅者可以发送消息说mqtt没有问题,也可以打开终端订阅消息后接收。
所以,我猜想在下载大文件后订阅已断开。我需要查看 broker 的内部连接订阅的主题来验证我的猜测。
但我不知道如何检查它。请告诉我检查经纪人的方法以及如果猜测被证明是正确的如何解决这个问题
因为代码太多,我先来概括一下
cloud send a series of order including download file, modified and the likes by mqtt
devices receive message by mqtt, then operate order and feedback
设备下载大文件后,终端打印wait handle : Connected with result code 0 of on_connect func 类型的结果时,有可能收不到其他MQTT消息
def on_connect(client, userdata, flags, rc):
print("wait handle : Connected with result code " + str(rc))
【问题讨论】:
-
您是通过 MQTT 发送大文件吗?虽然可以这样做,但协议的目的是另一个目的。它的设计目的不是为了传输大量数据,而是通过不保证可靠或快速的连接传输少量数据。
-
不行,MQTT只发送操作指令和几M以内的数据。我设置qos等于2,应该是可靠的,但是下载文件打印后订阅者没有收到后续消息on_connect 函数的结果
标签: python python-3.x mqtt mosquitto