sockets - mqtt 协议中订阅者的反馈消息
问题描述
我使用 MQTT 协议在两台计算机之间发送消息。我已经从这段代码中得到了模式。出版商:
import paho.mqtt.client as mqtt
from random import randrange, uniform
import time
mqttBroker ="mqtt.eclipse.org"
client = mqtt.Client("Temperature_Inside")
client.connect(mqttBroker)
while True:
randNumber = randrange(10)
client.publish("TEMPERATURE", randNumber)
print("Just published " + str(randNumber) + " to topic TEMPERATURE")
time.sleep(1)
订户:
import paho.mqtt.client as mqtt
import time
def on_message(client, userdata, message):
print("received message: " ,str(message.payload.decode("utf-8")))
mqttBroker ="mqtt.eclipse.org"
client = mqtt.Client("Smartphone")
client.connect(mqttBroker)
client.loop_start()
client.subscribe("TEMPERATURE")
client.on_message=on_message
time.sleep(1)
client.loop_stop()
我希望在收到消息时向发布者发送反馈。有没有办法获得消息反馈?
解决方案
MQTT 协议中没有端到端的传递通知。这是非常刻意的。
MQTT 是一个发布/订阅系统,旨在将信息的生产者与消费者完全分开。当生产者发布消息时,可能有 0 到无限数量的主题订阅者。也可能有离线订阅者在重新连接时会发送消息(可能是在消息发布后的任何时间)
MQTT 确实提供的是 QOS 级别,但重要的是要记住,这些仅适用于交付过程的单程。例如,在 QOS 2 发布的消息确保它会到达代理,但不保证任何订阅者,因为他们的订阅可能处于 QOS 0。
如果您的系统需要端到端交付通知,那么您将需要自己实现响应消息,这通常是晚餐,通过在初始消息中包含唯一 ID 并在也包含该 ID 的不同主题中发送单独的响应消息
推荐阅读
- java - 如何修复客户端首选项不接受服务器选择的协议版本 TLS10 [TLS12]
- php - 将php中的日期格式从字符串格式更改为PHP中的另一种格式
- operator-overloading - 逻辑 OR 中的 C 问题:2 个操作数评估 (0) 为假,但结果为 TRUE 范围
- python - Python Pygame:居中动态文本(整数)
- python - 如何在javascript函数中发送默认值
- java - 适配器类问题中的 Amob 集成
- openthread - 在 RPi 零 W 上设置 OpenThread 边界路由器
- python - 如何创建堆叠条形图,每列仅显示前 N 行(值)
- python - 我有一列包含格式为 %m-%Y 的日期时间(例如 'May-2019'),但是在将其转换为日期时间格式时会引发错误
- azure-devops - Azure Application Insight 应用映射类似查询