MQTT介绍与实例

MQTT介绍与实例

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布/订阅消息传输协议,常用于物联网(IoT)设备之间的通信。本文将详细介绍MQTT的基本原理、特点以及一个简单的实例。

1. MQTT原理

MQTT基于TCP/IP协议,采用发布/订阅模式进行消息传递。客户端向服务器发送消息时,服务器会将消息存储在消息队列中,等待订阅了该主题的客户端接收。当有新的消息到达时,服务器会将消息推送给订阅了该主题的客户端。

MQTT的主要特点如下:

  1. 低带宽占用:由于只传输消息内容,不传输消息头信息,因此相对于其他协议,MQTT具有较低的带宽占用。
  2. 易于实现:MQTT协议简单易懂,易于实现。
  3. 可扩展性:MQTT支持多种消息格式,如JSON、XML等,可以根据实际需求选择合适的消息格式。
  4. 可靠性:MQTT提供了消息持久化和QoS(服务质量)等级保障,确保消息传输的可靠性。

2. MQTT实例

下面我们通过一个简单的Python示例来演示如何使用MQTT库paho-mqtt进行消息发布和订阅。

首先,确保已经安装了paho-mqtt库,如果没有安装,可以使用以下命令进行安装:

bash 复制代码
pip install paho-mqtt

接下来,我们编写一个简单的Python脚本来实现MQTT的发布和订阅功能。

发布者(publisher.py):

python 复制代码
import paho.mqtt.client as mqtt

# 回调函数,当客户端收到服务器发来的CONNACK响应时调用
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe("test/topic")  # 订阅主题

# 回调函数,当客户端收到服务器发来的消息时调用
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

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

client.connect("mqtt.eclipse.org", 1883, 60)  # 连接到MQTT服务器
client.loop_start()  # 开始处理网络事件

while True:
    client.publish("test/topic", "Hello, MQTT!")  # 发布消息到指定主题

订阅者(subscriber.py):

python 复制代码
import paho.mqtt.client as mqtt

# 回调函数,当客户端收到服务器发来的CONNACK响应时调用
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

# 回调函数,当客户端收到服务器发来的消息时调用
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

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

client.connect("mqtt.eclipse.org", 1883, 60)  # 连接到MQTT服务器
client.loop_start()  # 开始处理网络事件

运行发布者脚本后,订阅者脚本会自动订阅到发布者发布的主题,并接收到发布者发送的消息。

至此,我们已经完成了一个简单的MQTT实例。在实际项目中,可以根据需要选择不同的MQTT服务器地址和端口,以及使用其他MQTT库或工具。

相关推荐
用户9888321871743 小时前
给 .NET 网络调用设定“预算”:用 CancellationTokenSource.CancelAfter 处理超时取消
后端
清风儿3293 小时前
一块不会说话的电表,把我们折腾了半个月
后端
预知同行3 小时前
深入解析 MoE 混合专家模型:从 Router 到 All-to-All 的架构全景与生产实践
后端·架构
upala3 小时前
【仓颉语言入门 · 第二篇 第 8 课】
后端
weiwin1234 小时前
MAF 入门(8):多模态实战——让 Agent 看懂图片、处理混合内容
人工智能·后端
弈栈录4 小时前
流式对话接口设计:SSE、WebSocket 与断线重连
后端
Java内核笔记4 小时前
Spring AI 生产级 Chat 接口:6 个开关、13 个坑,其中 2 个开关根本没生效
java·人工智能·后端
是江迪呀4 小时前
向全世界售卖你的产品:做了一款教程引导插件
前端·javascript·后端
WeiXin_DZbishe5 小时前
基于springboot装修风格选择系统的设计与开发-计算机毕设【课程设计】77964
java·vue.js·spring boot·后端·python·php·课程设计
leikooo5 小时前
ARTS 1018: 字符计数判断异位词、局部做对仍会增加维护负担与用 AI 也要理解自己在做什么
后端