PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。

需要注意的是:上传更新数据流是PUBLISH 中一个特殊的上传方式(发送给 $dp话题),PUBLISH 不等于上传更新数据流。
PUBLISH 更像是发送邮件,而更新数据是针对某一特定数据流进行数据更新。


固定报头

重发标志 DUP

位置:第1个字节,第3位

如果DUP标志被设置为0,表示这是客户端或服务端第一次请求发送这个PUBLISH报文。如果DUP标志被设置为1,表示这可能是一个早前报文请求的重发。

客户端或服务端请求重发一个PUBLISH报文时,必须将DUP标志设置为1。
对于QoS 0的消息,DUP标志必须设置为0

服务端发送PUBLISH报文给订阅者时,收到(入站)的PUBLISH报文的DUP标志的值不会被传播。
发送(出站)的PUBLISH报文与收到(入站)的PUBLISH报文中的DUP标志是独立设置的,它的值必须单独的根据发送(出站)的PUBLISH报文是否是一个重发来确定

服务质量等级

位置:第1个字节,第2-1位。

保留标志 RETAIN

位置:第1个字节,第0位。

如果客户端发给服务端的PUBLISH报文的保留(RETAIN)标志被设置为1,服务端必须存储这个应用消息和它的服务质量等级(QoS)

即将消息存储起来,以后有客户端订阅该主题就把之前的消息发出去

剩余长度字段

等于可变报头的长度加上有效载荷的长度。

可变报头

主题名 Topic Name

主题名(Topic Name)用于识别有效载荷数据应该被发布到哪一个信息通道

主题名必须是PUBLISH报文可变报头的第一个字段

PUBLISH报文中的主题名不能包含通配符

报文标识符 Packet Identifier

只有当QoS等级是1或2时,报文标识符(Packet Identifier)字段才能出现在PUBLISH报文中。


如下为PUBLISH 报文可变报头示例:

因为主题名占了3字节,故报文标识符为10

有效载荷

有效载荷包含将被发布的应用消息。即纯文本字符串、JSON 字符串

数据的内容和格式是应用特定的。

响应

PUBLISH报文的接收者必须按照根据PUBLISH报文中的QoS等级发送响应

动作 Actions

客户端使用PUBLISH报文发送应用消息给服务端,目的是分发到其它订阅匹配的客户端

服务端使用PUBLISH报文发送应用消息给每一个订阅匹配的客户端

MQTT协议(四) 【PUBLISH】发布消息相关推荐

  1. MQTT 控制报文 - PUBLISH发布消息,PUBACK,PUBREC,PUBREL,PUBCOMP - 第6章

    目录 6.1 PUBLISH - 发布消息 6.1.1 固定报头 6.1.1.1 DUP重发标志 6.1.1.2 Qos服务质量等级 6.1.1.3 RETAIN保留标志 6.1.2 可变报头 6.1 ...

  2. STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云

    STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 目录 STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 一 ...

  3. mqtt协议视频教程_MQTT协议教程

    mqtt协议视频教程 MQTT协议是一种广泛用于物联网的机器对机器(M2M)协议. 这是基于消息的协议. 它非常轻巧,因此在物联网生态系统中被采用. 几乎所有的 物联网云平台都支持MQTT协议,以从智 ...

  4. 使用java实现MQTT协议客户端的接收、发布消息和订阅、退订主题topic

    记录一下我实习的第一个任务,学习MQTT协议 首先呢得了解MQTT是什么,这里推荐一个我学习MQTT的中文文档 MQTT协议的基于TCP/IP协议的一个物联网协议,有几个概念必须要弄懂得主题(topi ...

  5. MQTT协议详解及开发教程(四)MQTT协议报文格式

    推荐一款稳定的基于C编写的MQTT Client开源库 cMQTT MQTT协议详解及开发教程(一)MQTT协议概述 MQTT协议详解及开发教程(二)MQTT服务器EMQx搭建 MQTT协议详解及开发 ...

  6. 一文读懂物联网 MQTT 协议之基础特性篇

    一.前言 上个月有个读者问我物联网 MQTT 协议实战相关的问题,我说后面会搞,没想到不知不觉一个月了,太忙了,再怎么忙答应的事情还是要给读者一个交代,所以就有了此文. 二.MQTT 协议概要 2.1 ...

  7. mqtt android简书,iOS MQTT协议笔记

    前言 接到任务项目需要用MQTT来写消息推送,经过一段时间在网上查看资料后写下这篇文章,文章内容大都来自互联网,在文章最后也会贴出相关网址和Demo.写这文章主要目的是自己总结下经验做下笔记,以便日后 ...

  8. iot架构 mqtt netty_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上

    前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...

  9. 一文读懂MQTT协议

    1  概述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级 ...

  10. 原理简介_消息通信的利器MQTT协议简介及协议原理

    - 没用过但是必须得知道系列 - 前言: 相比于 XMPP, MQTT 的简单轻量受到了不少工程师的喜爱,从物联网到传统的消息服务,简单可依赖的 MQTT 到底为何让人如此着迷呢? MQTT 协议-M ...

最新文章

  1. 演示:引发的次优路径故障分析与排除
  2. SAP ABAP 点滴记录
  3. C语言 读取文件内容
  4. PAT甲级1120 Friend Numbers:[C++题解]set去重且有序
  5. 让图片自适应大小的方法
  6. Flink的waterMark概念解释
  7. A除B求商(PAT20)高精度/低精度
  8. 管理Active Directory的工具
  9. java私塾(java私塾初级模拟银源代码)
  10. 少儿编程scratch(源码)
  11. Vue基础学习笔记Day05_生命周期_axios
  12. 多多客支持微信公众号,正式开放公测!
  13. 将数组分成两部分,使得 |sum1 - sum2| 最小. LeetCode - 1049
  14. 【docker问题】Client.Timeout exceeded while awaiting headers
  15. DiskGenius清除分区空闲空间后硬盘满了
  16. 冷战时期_从冷战到深度学习的机器翻译历史
  17. git上传代码的时候出现:Please tell me who you are.解决方法
  18. 【数模之文本文件操作】
  19. 软件工程小组课程设计项目
  20. JAVA提高篇(24)--CharArrayReader、CharArrayWriter简介

热门文章

  1. 什么是海外DDoS高防?
  2. Git 笔记 - 程序员都要掌握的 Git
  3. pow函数需要注意的问题
  4. Python爬虫笔记【一】模拟用户访问之验证码清理(4)
  5. PLM与ERP的区别
  6. python写入文件到docx_从python中的txt文件写入docx文件
  7. 山海演武传·黄道·第一卷 雏龙惊蛰 第二十五 ~ 二十六章 赤龙与紫龙
  8. 关于“访问映射网络驱动器提示 本地设备名已在使用中,此连接尚未还原”的解决方法
  9. 【go 语言】linux下go开发教程3:Golang弃用go get工具
  10. 实现Android手机之间在局域网下传输任意文件