MQTT基础 三: 发布、订阅和取消订阅

内容:
重点介绍MQTT 中的发布、订阅和取消订阅的细节

正文

发布(Publish)
  • MQTT 客户端可以在连接到代理后立即发布消息。MQTT 在代理上使用基于主题的消息过滤。每条消息都必须包含一个主题,代理可以使用该主题将消息转发给感兴趣的客户端。通常,每条消息都有一个负载,其中包含要以字节格式传输的数据。MQTT 与数据无关。客户端的用例决定了有效负载的结构。发送客户端(发布者)决定是否要发送二进制数据、文本数据,甚至完整的 XML 或 JSON。
image.png
  • topicName
    主题名称是一个简单的字符串,它以正斜杠作为分隔符进行分层结构。例如,“我的家/客厅/温度”

  • Qos
    此数字表示消息的服务质量 (QoS)。有三个级别:0、1 和 2。服务级别决定了消息到达预期接收者(客户端或代理)的保证类型。

  • RatainFlag(保留标志)
    此标志定义消息是否由代理保存为指定主题的最后一个已知良好值。当新客户端订阅主题时,他们会收到保留在该主题上的最后一条消息。

  • PayLoad
    这是消息的实际内容。MQTT 与数据无关。可以发送图像、任何编码的文本、加密数据以及几乎所有二进制数据。

  • packetId(数据包标识符)
    数据包标识符标识唯一消息,因为它在客户端和代理之间流动。数据包标识符仅与大于零的 QoS 级别相关。客户端库和/或代理负责设置此内部 MQTT 标识符。

  • DupFlag
    该标志表明该消息是重复的并且由于预期的接收者(客户端或代理)没有确认原始消息而被重新发送。这仅与 QoS 大于 0 相关。通常,重新发送/复制机制由 MQTT 客户端库或代理作为实现细节处理。

    当客户端向MQTT 代理发送消息进行发布时,代理读取消息、确认消息(根据 QoS 级别)并处理消息。代理的处理包括确定哪些客户端订阅了主题并将消息发送给他们。
    最初发布消息的客户端只关心将 PUBLISH 消息传递给代理。一旦代理收到 PUBLISH 消息,代理就有责任将消息传递给所有订阅者。发布客户端不会得到关于是否有人对发布的消息感兴趣或有多少客户端从代理收到消息的任何反馈。

订阅(Subscribe)
  • 如果没有人收到消息,发布消息就没有意义。换句话说,如果没有客户端订阅消息的主题。这个订阅消息非常简单,它包含一个唯一的数据包标识符和一个订阅列表。
image.png
  • 数据包标识符
    数据包标识符唯一标识消息,因为它在客户端和代理之间流动。客户端库和/或代理负责设置此内部 MQTT 标识符。

  • 订阅列表
    一个 SUBSCRIBE 消息可以包含一个客户端的多个订阅。每个订阅由一个主题和一个 QoS 级别组成。订阅消息中的主题可以包含通配符,使订阅主题模式而不是特定主题成为可能。如果一个客户端存在重叠订阅,则代理会传送该主题具有最高 QoS 级别的消息。

Suback(确认消息)
  • 为了确认每个订阅,代理向客户端发送一个SUBACK确认消息。该消息包含原始 Subscribe 消息的数据包标识符(以明确标识该消息)和返回码列表。

    image.png

  • 包标识符
    包标识符是用于标识消息的唯一标识符。它与 SUBSCRIBE 消息中的相同。

  • 返回代码
    代理为它在 SUBSCRIBE 消息中收到的每个主题/QoS 对发送一个返回代码。
    例如,如果 SUBSCRIBE 消息有五个订阅,则 SUBACK 消息包含五个返回码。返回码确认每个主题并显示代理授予的 QoS 级别。如果代理拒绝订阅,则 SUBACK 消息包含该特定主题的失败返回代码。例如,如果客户端没有足够的权限订阅主题或主题格式错误。

    image.png

    image.png

    客户端成功发送 SUBSCRIBE 消息并收到 SUBACK 消息后,它会获取与 SUBSCRIBE 消息包含的订阅中的主题匹配的每条已发布消息。

UNSUBACK
  • 为了确认取消订阅,代理向客户端发送一个UNSUBACK确认消息。此消息仅包含原始 UNSUBSCRIBE 消息的数据包标识符(以明确标识该消息)。
    image.png
  • 包标识符
    包标识符唯一地标识消息。如前所述,这与 UNSUBSCRIBE 消息中的数据包标识符相同。
    客户端收到来自broker的UNSUBACK后,可以认为UNSUBSCRIBE消息中的订阅被删除了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容