gpt4 book ai didi

python - MQTT 是如何工作的?如果接收方文件在发送方文件之后启动,则无法获取数据

转载 作者:行者123 更新时间:2023-12-01 20:16:46 25 4
gpt4 key购买 nike

我是 MQTT 的新手,我想打印一个简单的数字范围,我创建了 2 个文件,其中第一个文件将数据发送到第二个文件,脚本如下:

sender.py

import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("192.168.1.169", 1883, 60)
for i in range(1,100):
client.publish("TestTopic", i)
print(i)
client.disconnect()

接收者.py:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))

client.subscribe("house/bulbs/bulb1")


def on_message(client, userdata, msg):
# print(msg.topic+" "+str(msg.payload))
print("message received ", str(msg.payload.decode("utf-8")))
print("message topic=", msg.topic)
print("message qos=", msg.qos)
print("message retain flag=", msg.retain)

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("192.168.1.169", 1883, 60)
client.loop_forever()

如果接收方文件处于事件状态,我可以打印数据,但如果我启动发送方文件,然后启动接收方文件,则在打印数据时会出现问题,主要问题是 MQTT 是否遵循队列机制与否如果是,那么...如果我正在运行发送方文件,那么它的所有数据都应该在队列中,之后当我运行另一个作为接收方的文件时,我应该被打印。 .但它的工作方式不同,请帮助我,我查阅了很多文档,但我能够找到任何相关信息..最近我发现clean_session,如果有人对此有所了解,请告诉我。 ...有任何与我的代码相关的问题或任何问题请告诉我谢谢

最佳答案

MQTT 是一种发布/订阅协议(protocol),而不是消息队列系统。

这意味着在正常情况下,如果发布消息时没有订阅者在运行,则消息将不会被传递。

可以让broker为特定的订阅者排队消息,但这要求订阅者在消息发布之前已经连接,并且订阅的QOS大于0。然后只要重新连接将干净 session 标志设置为 false 并在发布后使​​用相同的客户端 ID,然后代理将传递丢失的消息。

保留的消息有所不同。如果发布的消息的保留标志设置为 true,则当每个订阅者订阅匹配主题时,代理会将这条消息传递给每个订阅者。对于给定主题只能有 1 条保留消息。

关于python - MQTT 是如何工作的?如果接收方文件在发送方文件之后启动,则无法获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58952260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com