当前位置: 首页 > article >正文

协议 MQTT

目录

什么是 MQTT 协议?

MQTT 的特点

MQTT 的工作原理

MQTT 关键组件

MQTT 的应用场景

如何使用 MQTT?

小结


什么是 MQTT 协议?

MQTT(Message Queuing Telemetry Transport)是一种基于轻量级发布/订阅模式的消息传输协议,特别适用于对网络带宽和设备资源有严格限制的场景。MQTT 设计的初衷是为远程设备之间的低带宽、不可靠网络通信提供解决方案,因此在物联网(IoT)领域广泛应用。

MQTT 的特点

  1. 轻量级:MQTT 消息头部非常小,适合低带宽和高延迟的网络环境。

  2. 发布/订阅模型:设备通过主题(Topic)发送和接收消息,而无需直接连接彼此。这种解耦的设计非常灵活,适合大量设备同时通信。

  3. 质量服务等级(QoS):MQTT 提供三种消息传递质量服务等级,保证消息的传递可靠性:

    • QoS 0:消息最多传递一次,接收端不做确认,无法保证消息一定送达。
    • QoS 1:消息至少传递一次,接收端会确认接收。
    • QoS 2:消息仅传递一次,确保消息不会重复。
  4. 长连接:MQTT 使用 TCP 作为传输协议,支持长连接,减少了重复连接的开销,非常适合物联网设备的长时间通信需求。

  5. 保留消息和遗嘱消息:保留消息用于新订阅者获取最新信息,而遗嘱消息确保客户端意外断开时通知订阅者。

MQTT 的工作原理

MQTT 的核心架构是基于客户端和**服务器(Broker)**的模式。客户端通过 TCP/IP 网络连接到 Broker,进行消息的发布和订阅。以下是 MQTT 工作流程的简要描述:

  1. 客户端连接到 Broker:客户端通过发送 CONNECT 报文与 Broker 建立连接,Broker 负责管理所有客户端的连接和消息传递。
  2. 发布消息:发布者客户端发布一条消息到某个主题(Topic),并指定这条消息的 QoS 等级,消息将传递给 Broker。
  3. 订阅消息:订阅者客户端向 Broker 订阅某个主题,当有其他客户端发布到该主题的消息时,Broker 会将消息转发给所有订阅该主题的客户端。
  4. 消息传递:根据 QoS 等级,Broker 确保消息可靠性地传递给订阅者。
  5. 断开连接:当客户端不再需要通信时,它会通过发送 DISCONNECT 报文与 Broker 断开连接。

MQTT 关键组件

  • Broker(消息代理):负责消息的接收、过滤和分发,管理客户端的连接。
  • 客户端:可以是发布者(Publisher)或订阅者(Subscriber),发布者发布消息,订阅者接收消息。
  • 主题(Topic):每条消息都会关联一个主题,主题是一个层次化的字符串,用于标识消息的类别和范围,订阅者根据主题接收消息。

MQTT 的应用场景

  1. 物联网(IoT):大量传感器和设备需要实时通信,MQTT 以其低带宽需求和高可靠性成为 IoT 系统的首选协议。
  2. 智能家居:例如灯光、温控等智能设备之间的消息传递。
  3. 车辆跟踪:用于车辆数据的远程传输,支持高延迟网络。
  4. 医疗设备:低功耗设备需要稳定的数据传输。

如何使用 MQTT?

  1. 安装 MQTT Broker
    首先,MQTT 通信需要一个 Broker。比较常见的 MQTT Broker 软件有:
  • Mosquitto:一个开源的 MQTT Broker,可以通过以下命令安装:

    sudo apt-get install mosquitto mosquitto-clients
  1. 连接到 Broker 使用 MQTT 客户端(如 Python 库 paho-mqtt)连接到 MQTT Broker,并发布和订阅消息。

  2. 使用 paho-mqtt 库编写客户端

    • 安装 paho-mqtt
    pip install paho-mqtt
    • 编写发布者(Publisher)代码
    import paho.mqtt.client as mqtt broker = "test.mosquitto.org" port = 1883 topic = "test/topic" # 创建 MQTT 客户端实例 client = mqtt.Client() # 连接到 Broker client.connect(broker, port) # 发布消息 client.publish(topic, "Hello MQTT!") # 断开连接 client.disconnect()
    • 编写订阅者(Subscriber)代码
    import paho.mqtt.client as mqtt broker = "test.mosquitto.org" port = 1883 topic = "test/topic" # 当收到消息时的回调函数 def on_message(client, userdata, message): print(f"收到消息: {message.payload.decode()}") # 创建 MQTT 客户端实例 client = mqtt.Client() # 设置回调函数 client.on_message = on_message # 连接到 Broker client.connect(broker, port) # 订阅主题 client.subscribe(topic) # 保持连接 client.loop_forever()

小结

MQTT 是一种轻量、可靠、扩展性强的协议,特别适合物联网和其他资源受限的场景。它基于发布/订阅模式,能够有效地减少网络带宽消耗,并支持不同的消息传递服务质量等级。通过 Broker 的协调,MQTT 能够让大量设备进行稳定通信,广泛应用于智能家居、医疗、交通等多个领域。


http://www.kler.cn/news/359084.html

相关文章:

  • Scala中抽象类重写
  • 使用JMeter录制元件来录制HTTPS下的脚本
  • 第三方软件检测机构有哪些服务?重庆软件检测机构分享
  • C# WinForm实现画笔签名及解决MemoryBmp格式问题
  • YOLOv11改进策略【Conv和Transformer】| ACmix 卷积和自注意力的结合,充分发挥两者优势
  • 【MATLAB源码-第278期】基于matlab的ACO-OFDM系统仿真,输出误码率曲线图、时域频域图和子载波分离时域图。
  • Python内置函数classmethod()详解
  • JAVA设计模式学习之策略模式详解
  • uniapp onPageScroll
  • 全面解析EFK日志管理系统部署流程
  • Could not load dynamic library “libcudart.so.11.0
  • 2024年10月第2个交易周收盘总结:怎样卖出!
  • ESD防静电闸机检测为汽车电子工厂车间保驾护航
  • 大模型学习笔记
  • sql实战解析-sum()over(partition by xx order by xx)
  • 【分布式微服务云原生】《微服务架构大揭秘:关键组件全览与实战指南》
  • .net framework 3.5sp1组件如何安装
  • Java设计模式六大原则
  • uniapp picker实现省市二级级联和省市区三级级联
  • QSpliter实例操作