mqtt是一种广泛应用于物联网方向上的通信协议,其本质是收发--即一个发布者,一个订阅者,不过,mqtt不是点对点的通信,mqtt是通过一个broker来实现两端的对接,相当于一个文件中转站。
一、先看结果图:

二、再来看代码:
mqtt_publisher
import paho.mqtt.client as mqtt
import time
import json
import random
#mqtt broker
BROKER = "broker.hivemq.com"
PORT = 1883
TOPIC = "robot/test/mqtt"
#connect
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("connect success")
else:
print("connect failure:{rc}")
def main():
client = mqtt.Client()
client.on_connect = on_connect
client.connect(BROKER, PORT, 60)
client.loop_start()
counter = 0
while True:
test_data = {
"message_id": counter,
"timestamp": time.time(),
"temperature": round(random.uniform(20.0, 35.0), 2),
"humidity": round(random.uniform(30.0, 80.0), 2),
"status": "active"
}
# 发布消息
payload = json.dumps(test_data)
result = client.publish(TOPIC, payload)
if __name__ == "__main__":
main()
mqtt_subscriber
import paho.mqtt.client as mqtt
import json
import time
#mqtt broker
BROKER = "broker.hivemq.com"
PORT = 1883
TOPIC = "robot/test/mqtt"
#连接
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("connect to MQTT Broker")
# 订阅主题
client.subscribe(TOPIC)
print(f"已订阅主题: {TOPIC}")
else:
print(f"连接失败,返回码: {rc}")
#消息
def on_message(client, userdata, msg):
# 解析接收到的消息
payload = msg.payload.decode('utf-8')
data = json.loads(payload)
print(f"收到消息 - 主题: {msg.topic}")
print(f"数据: {data}")
def main():
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
#连接broker
client.connect(BROKER, PORT, 60)
client.loop_forever()
if __name__ == "__main__":
main()
三、最后讲讲原理
MQTT协议是一种基于发布/订阅模式的轻量级通信协议,其核心设计理念是通过一个中心化的代理服务器(Broker)来实现消息的传递,而不是传统的点对点直接通信。这种架构使得MQTT特别适合物联网环境中的设备通信,因为设备之间不需要知道彼此的具体位置和地址,只需要通过统一的Broker进行消息的中转。
在MQTT的通信模型中,存在三种基本角色:发布者、订阅者和代理服务器。发布者是产生消息的客户端,它们将消息发送到特定的主题(Topic)上;订阅者是接收消息的客户端,它们向Broker订阅自己感兴趣的主题;而代理服务器则扮演着消息路由器的角色,负责接收发布者的消息,根据主题将消息分发给相应的订阅者。这种设计使得发布者和订阅者完全解耦,它们可以独立运行,不需要知道对方的存在。
(ennnn,生成的架构图不好看,各位自行脑补)
服务质量(QoS)是MQTT协议的另一个重要特性,它定义了消息传递的可靠性保证。QoS 0提供最多一次传递,消息可能会丢失但不会重复;QoS 1提供至少一次传递,消息不会丢失但可能会重复;QoS 2提供恰好一次传递,确保消息既不丢失也不重复。不同的QoS级别适用于不同的应用场景,可以根据网络环境和应用需求选择合适的服务质量级别。
这种通信模式的优势在于它能够很好地适应物联网环境的特点:设备数量众多、网络环境复杂、设备资源有限。通过Broker的统一管理,可以实现高效的设备管理和消息分发,同时发布者和订阅者的解耦设计使得系统的扩展性得到极大提升,新的设备可以随时加入网络而不会影响现有的通信结构。
1454

被折叠的 条评论
为什么被折叠?



