mqtt协议实现--发布管理(2)

本文详细介绍了MQTT协议中的发布管理流程,包括正常流程和异常处理,解析了发布控制报文的结构,并重点讨论了PUBLISH、PUBACK、PUBREC、PUBREL及PUBCOMP等报文的角色。同时,阐述了QOS等级在发布过程中的作用,以及如何确保消息的可靠传递。此外,还提到了发布有效载荷的内容及其在不同控制报文中的应用。
摘要由CSDN通过智能技术生成

2.1.3 发布管理

        发布管理是建链后,进行消息通信的第一步,是由发布客户端往服务端发送一个主题,或者由服务端往客户端发布一个主题。同样的我们将按照发布的正常流程和异常流程,以及发布的控制报文和有效载荷的视角进行解读。

1)发布正常流程

        如下图所示以客户端往服务端发送主题为例,注意这个方向可以是反过来的。从图中可以看出服务端在收到发布主题的消息后,会依据报文中的QOS等级进行回复。如果是QOS1等级,即至少发布一次,则会只回复一个发布确认,假设此次交互中失败了,那按照设定的QOS1等级,客户端可以再次发送,直到发送成功,因此上述的一次交互也是合理的。如果是QOS2等级,即只发布一次,则会进行两次的握手,首先会告知客户端发布收到,然后客户端会根据设定的只发布一次的规则,告知服务端发布释放,最后再由服务端通过发布完成告知客户端完成所有流程。与第一种可以多次收发不同,这种方式只能收发一次,因此需要通过多次握手,保证确保主题可以发布成功。

 

2)发布控制报文

        如下图所示是发布的控制报文,与上图一一对应,PUBLISH的可变报文头会包含topic的信息,至于说topic的内容,则在有效载荷中包含,由具体的应用决定。在PUBLISH报文的固定报文头中包含QOS0~2的等级,QOS0是没有回复的,剩下的两个等级有回复,另外如果是重发的PUBLISH报文,DUP的位会被设置为1。其他的回复报文比较简单,如果想了解控制报文的详细格式可以对照参考文献MQTT协议[2]。

 

3)发布有效载荷

        如下图所示,在发布管理的的5种控制报文中,只有PUBLISH报文有有效载荷,该载荷就是topic主题的内容,该内容是由具体的应用决定,除此以外其他的都没有。

 4)发布异常流程

        连接建立以后,在发布主题的时候也是有断链的情况出现的,这个时候需要明确是在发送哪个报文的时候出现断链,如下图所示是在该场景下PUBLISH报文和PUBREL报文异常时出现的断链。可以根据图示的位值进行排查。

未完待续...

参考文献:

[2]Introduction · MQTT协议中文版 (gitbooks.io)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值