mqtt通信

部署运行你感兴趣的模型镜像

        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的统一管理,可以实现高效的设备管理和消息分发,同时发布者和订阅者的解耦设计使得系统的扩展性得到极大提升,新的设备可以随时加入网络而不会影响现有的通信结构。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值