MQTT Part 4 发布,订阅和退订

本文翻译自http://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe

未经允许,不得转载

发布

在MQTT客户端与broker建立连接之后,它就可以发布消息了。MQTT broker根据主题来过滤消息(参见Part 2),所以,每个消息都必须包含主题,broker依据主题来给订阅了此主题的客户端转发消息。通常每条消息都含有一个消息体(payload),消息体以字节格式封装实际传输数据。MQTT是数据不可知的,也就是说它完全依赖于使用场景来决定如何构建有效消息体(payload)。如果想要发送二进制数据、文本数据或者甚至是完整的XML或JSON数据,也完全没问题。MQTT的消息发布还有更多特性,下面我们将详细讨论:


Topic Name(主题名称)
它可以是一个简单的字符串,使用分层结构,并且用左斜杠作为分隔符。例如,“myhome/livingroom/temperature”或“Germany/Munich/Octoberfest/people”。有关主题的更多细节可以在MQTT基础的第5部分中找到。

QoS(服务质量)
即消息的服务质量级别(Quality of Service Level)。级别(0、1或2)决定了消息到达另一端(客户端或代理)时的质量保证。有关服务质量的更多细节可以在MQTT基础入门的第6部分中找到。

Retain-Flag(保持标志)
该标志确定代理是否持久保存某个特定主题的消息。订阅该主题的新客户端将在订阅后立即收到该主题的最后保留消息。在接下来的文章中将讨论有关消息保持的更多内容以及最佳实践。

Payload(有效载荷)这是消息的实际内容。MQTT是完全数据未知的,发送的有可能是图片、任何编码的文本、加密的数据,但实际上每个数据都是二进制的形式。

Packet Identifier(包标识符)包标识符是客户端和broker之间的唯一标识符,用于标识消息流中的消息。它只与大于0的服务质量有关。设置此MQTT内部标识符是客户端库文件,和/或是broker的责任。

DUP flag(重复标志)该重复标志表示,此消息是重复的,是因为另一端没有应答原始消息而重发的。这只是和大于0时的QoS有关,更多细节在第6部分,关于QoS级别。重发/副本机制的实现细节通常由MQTT客户端库或代理处理。

因此,当客户端向MQTT代理服务器发送一个publish时,代理服务器将阅读该publish,必要时(根据QoS级别)应答该publish,然后进行处理。处理包括确定哪个客户端订阅了该主题,然后将消息发送给订阅了该主题的那个客户端。


最初发布消息的客户端只关心向代理服务器传递publish消息。自此,代理服务器就负责将消息传递给所有的订阅者。某人是否对发布的消息感兴趣,以及到底有多少客户端收到了代理服务器的消息,对此,发布客户端不会得到任何反馈。

订阅(Subscribe)

如果没有人收到消息,或者换句话说,如果没有客户订阅任何主题,发布消息就没有意义了。客户端需要向MQTT代理服务器发送订阅消息以便收到相关消息。订阅消息非常简单,它只包含一个唯一的包标识符和一个订阅列表。


Packet Identifier(包标识符)
包标识符是客户端和broker之间的唯一标识符,用于标识消息流中的某个消息。它仅仅与大于零的服务质量有关。设置此MQTT内部标识符是客户端库文件,和/或代理服务器的责任。
订阅列表
订阅消息可以包含对某个客户端的任意数量的订阅。每个订阅都是由一对主题和QoS级别组成。订阅消息的主题还可以包含通配符,这使得可以订阅特定的主题模式。如果对一个客户端有重叠订阅,则代理服务器将使用该主题的最高QoS级别传递消息。

订阅应答(Suback)

每个订阅都将由代理服务器通过向客户端发送一个SUBACK消息进行确认。此消息包含与原始订阅消息相同的数据包标识符(以便标识消息)和返回码列表。


Packet Identifier(包标识符)
包标识符是用来识别某个消息的唯一标识。它和SUBSCRIBE消息中的相同。

Return Code(返回码)
代理服务器会为订阅消息中收到的每个主题/ QoS对发送一个返回码。因此,如果订阅的消息有5个,将有5个返回代码,以确认代理服务器授权的具有QoS级别的每个主题。如果订阅被代理服务器禁止(例如,如果客户端不允许订阅此主题,由于权限不足或该主题有问题),代理服务器将向指定主题响应失败返回码。

返回代码 返回代码响应
0 成功 – 最大 QoS 0
1 成功 – 最大 QoS 1
2 成功 – 最大 QoS 2
128 失败

当某个客户端成功发送订阅(SUBSCRIBE)消息并收到了订阅响应(SUBACK)消息,它将接收到与订阅主题匹配的每个已发布消息。

退订(Unsubscribe)

和订阅(SUBSCRIBE)消息相对应的是退订(UNSUBSCRIBE)消息,它将从代理服务器上删除某个客户端已存在的订阅。退订消息和订阅消息很相似,同样包括一个包标识符和主题列表。


Packet Identifier(包标识符)
包标识符是用来标识消息的唯一标识符。退订消息的确认包含相同的标识符。

主题列表
主题列表包含客户端希望退订的任意数量的主题。只需要把主题作为字符串来发送(无需QoS),无论最初订阅时QoS级别是什么,这些主题都将被退订。

退订响应(Unsuback)

代理服务器将通过应答退订响应(UNSUBACK)消息确认退订请求。该消息只包含一个包标识符。


Packet Identifier(包标识符)
数据包标识符是用来标识消息的唯一标识符。它和退订消息中的标识符相同。

客户端从代理服务器接收到退订响应(UNSUBACK)消息后,就认为退订(UNSUBSCRIBE)消息中的订阅已被删除了。

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

推荐阅读更多精彩内容