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

我是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()

receiver.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,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",60)
client.loop_forever()

如果接收方文件处于活动状态,我可以打印数据,但是如果我启动发送方文件然后启动接收方文件,则在打印数据时出现问题。主要问题是MQTT是否遵循队列是还是不是机制,如果是,则....如果我正在运行发送方文件,则其所有数据都应在队列中,然后在运行其他文件(即接收方)时,应进行打印。 。但是它不能以相同的方式工作,请帮助我,我去了很多文档,但是我能够找到任何相关信息。.最近我发现 clean_session ,如果有人对此有所了解,请告诉我。 ...对我的代码有任何疑问或任何疑问,请告诉我 谢谢

smile2010cool123 回答:MQTT如何工作?如果发送方文件之后启动了接收方文件,则无法获取数据

MQTT是发布/订阅协议,不是消息排队系统。

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

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

保留的消息有所不同。如果发布了一条消息,且保留标志设置为true,那么代理将在每个订阅者订阅匹配主题时将此消息传递给每个订阅者。给定主题只能保留1条消息。

本文链接:https://www.f2er.com/3082254.html

大家都在问