MQTT初始篇笔记整理

MQTT简介

  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),基于TCP/IP 协议栈而构建,虽然叫消息队列遥测传输,但是她与消息队列毫无关系,她是一个IBM开发的客户端服务端架构的 发布/订阅模式 的消息传输协议;她的设计思想是轻巧、开放、简单、规范、易于实现,因此MQTT比较适合在物联网环境(IoT,Internet of Things)以及机器与机器的通信(M2M,Machine to Machine)等受限的环境下。
MQTT的优势
  • MQTT是一种轻量级、灵活的网络协议,轻量级保证其可在严重受限的设备硬件和高延迟/带宽有限的网络上实现;她的灵活性使得IoT设备和服务的多样化应用场景提供支持成为可能
    • 1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
    • 2、对负载内容屏蔽的消息传输;
    • 3、使用 TCP/IP 提供网络连接;
    • 4、有三种消息发布服务质量:
      • “至多一次” 服务质量级别0 QoS0,消息将最多传递一次,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。她是最快的传输方式,有时成为"触发并忘记"。消息最多传递一次
      • “至少一次” 服务质量级别1 QoS1,消息会始终至少传递一次,确保消息到达,但消息重复可能会发生。
      • “只有一次” 服务质量级别2 QoS2,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。她是最安全也是最慢的传输方式。
    • 5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
    • 6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制; 
MQTT与其他网络协议的对比
  • 与HTTP协议对比
    • 1. HTTP 是一种同步协议。客户端需要等待服务器响应。Web 浏览器具有这样的要求,但它的代价是牺牲了可伸缩性。在 IoT 领域,大量设备以及很可能不可靠或高延迟的网络使得同步通信成为问题。异步消息协议更适合 IoT 应用程序。传感器发送读数,让网络确定将其传送到目标设备和服务的最佳路线和时间。
    • 2. HTTP 是单向的。客户端必须发起连接。在 IoT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。
    • 3. HTTP 是一种 1-1 协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 IoT 应用程序中的一种常见使用情况。
    • 4. HTTP 是一种有许多标头和规则的重量级协议。它不适合受限的网络。
  • 与AMQP对比
    • 企业中间件系统中使用的最流行的消息协议被称为 AMQP(高级消息排队协议)。但是,在高性能环境中,计算能力和网络延迟通常不是问题。AMQP 致力于在企业应用程序中实现可靠性和互操作性。它拥有庞大的特性集,但不适合资源受限的 IoT 应用程序。
  • 与XMPP对比
    • XMPP(Extensible Messaging and Presence Protocol,可扩展消息和状态协议)是一种对等即时消息 (IM) 协议。它高度依赖于支持 IM 用例的特性,比如存在状态和介质连接。与 MQTT 相比,它在设备和网络上需要的资源都要多得多。 
发布订阅模型
  • MQTT 协议在网络中定义了两种实体类型:一个消息代理和一些客户端。代理是一个服务器,它从客户端接收所有消息,然后将这些消息路由到相关的目标客户端。客户端是能够与代理交互来发送和接收消息的任何事物。客户端可以是现场的 IoT 传感器,或者是数据中心内处理 IoT 数据的应用程序。
    • 1.客户端连接到代理。它可以订阅代理中的任何消息 “主题”。此连接可以是简单的 TCP/IP 连接,也可以是用于发送敏感消息的加密 TLS 连接。
    • 2.客户端通过将消息和主题发送给代理,发布某个主题范围内的消息。
    • 3.代理然后将消息转发给所有订阅该主题的客户端。 
  • 因为 MQTT 消息是按主题进行组织的,所以应用程序开发人员能灵活地指定某些客户端只能与某些消息交互。就是订阅相应的主题后才会收到相应的主题下的消息。 
MQTT 控制报文格式
  • 2.1 MQTT控制报文的结构 Structure of an MQTT Control Packet 
  • 2.2 固定报头 Fixed header 

  • 2.2.1 MQTT控制报文的类型 MQTT Control Packet type

 

  • 2.2.2 标志 Flags 

  • 控制报文字类型是从值区分为0-15依次对应 Reserved Connect ConnAck Publish PubRec PubComp Subscribe SubAck Unsubscribe PingReq PingResp DisConnect Reserved 相应的Flags 有对应的数据

学习网址
如有不当之处 敬请指出 如需转载请注明出处 谢谢

转载于:https://www.cnblogs.com/ITCoderW/p/9310581.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQTT Essentials - A Lightweight IoT Protocol by Gaston C. Hillar English | 14 Apr. 2017 | ASIN: B01MS9I105 | 280 Pages | AZW3 | 6.19 MB Key Features Make your connected devices less prone to attackers by understanding practical security mechanisms Dive deep into one of IoT's extremely lightweight machines to enable connectivity protocol with some real-world examples Learn to take advantage of the features included in MQTT for IoT and Machine-to-Machine communications with complete real-life examples Book Description This step-by-step guide will help you gain a deep understanding of the lightweight MQTT protocol. We'll begin with the specific vocabulary of MQTT and its working modes, followed by installing a Mosquitto MQTT broker. Then, you will use best practices to secure the MQTT Mosquitto broker to ensure that only authorized clients are able to publish and receive messages. Once you have secured the broker with the appropriate configuration, you will develop a solution that controls a drone with Python. Further on, you will use Python on a Raspberry Pi 3 board to process commands and Python on Intel Boards (Joule, Edison and Galileo). You will then connect to the MQTT broker, subscribe to topics, send messages, and receive messages in Python. You will also develop a solution that interacts with sensors in Java by working with MQTT messages. Moving forward, you will work with an asynchronous API with callbacks to make the sensors interact with MQTT messages. Following the same process, you will develop an iOS app with Swift 3, build a website that uses WebSockets to connect to the MQTT broker, and control home automation devices with HTML5, JavaScript code, Node.js and MQTT messages What you will learn Understand how MQTTv3.1 and v3.1.1 works in detail Install and secure a Mosquitto MQTT broker by following best practices Design and develop IoT solutions combined with mobile and web apps that use MQTT messages to communicate Explore the features included
ESP32是一款基于Espressif Systems ESP8266平台的增强型Wi-Fi/蓝牙SoC芯片,它支持MQTT(Message Queuing Telemetry Transport)协议,这是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)应用中。 在ESP32上初始MQTT通常需要以下几个步骤: 1. **库导入**: 首先,你需要包含`esp_mqtt.h`头文件,这是ESP32提供的mqtt SDK的一部分。 ```c #include <esp_mqtt.h> ``` 2. **网络配置**: 确保已经连接到WiFi网络,并配置好必要的网络参数,如服务器地址(`server_ip`)、端口(`port`)等。 ```c const char* ssid = "your_wifi_ssid"; const char* password = "your_wifi_password"; const char* server_ip = "your_mqtt_server_address"; const int port = MQTT_DEFAULT_PORT; ``` 3. **MQTT初始化**: 创建一个`esp_mqtt_client_config_t`结构体并设置相关参数,然后创建`esp_mqtt_client_t`实例。 ```c esp_mqtt_client_config_t mqtt_cfg = { .uri = "tcp://" server_ip, .username = "your_username", .password = "your_password", .keepalive = 60, .event_handler = &mqtt_event_handler // 自定义事件处理器 }; esp_err_t err = esp_mqtt_init(&mqtt_cfg); if (err != ESP_OK) { // 处理错误 } esp_mqtt_client_t* client = esp_mqtt_new_default(); ``` 4. **连接和认证**: 使用`esp_mqtt_connect()`函数尝试连接到MQTT服务器并进行身份验证。 ```c esp_err_t conn_ret = esp_mqtt_connect(client); if (conn_ret == ESP_OK) { // 连接成功,开始监听消息 } else { // 处理连接失败 } ``` 5. **订阅主题**(如果需要): 使用`esp_mqtt_subscribe()`订阅感兴趣的主题。 ```c esp_err_t sub_ret = esp_mqtt_subscribe(client, topic, 1, NULL); // 第二个参数是QoS等级 ``` 6. **断开连接**(程序结束前记得关闭连接): 当不再需要MQTT服务时,调用`esp_mqtt_destroy()`释放资源。 ```c esp_err_t disconnect_ret = esp_mqtt_disconnect(client); esp_mqtt_destroy(client); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值