你不得不看的图文并茂的MQTT协议通信过程!!!

更新时间:2023-07-01 11:55:04 阅读: 评论:0

你不得不看的图⽂并茂的MQTT协议通信过程
⽂章⽬录
MQTT连接服务器
客户端到服务器的⽹络连接建⽴后,客户端发送给服务器的第⼀个报⽂必须是CONNECT报⽂
在⼀个⽹络连接上,客户端只能发送⼀次CONNECT报⽂,如果出现第⼆个CONNECT 报⽂,按照协议标准,服务器会将第⼆个CONNECT报⽂当作协议违规处理并断开客户端的连接。
对于正常的连接请求,服务器必须产⽣应答报⽂,如果⽆法建⽴会话,服务器应该在应答报⽂中报告对应的错误代码。
MQTT订阅主题
客户端向服务器发送SUBSCRIBE报⽂⽤于创建⼀个或多个订阅。
在服务器中,会记录这个客户关注的⼀个或者多个主题,当服务器收到这些主题的PUBLISH报⽂的时候,将分发应⽤消息到与之匹配的客户端中。
SUBSCRIBE报⽂⽀持通配符,也为每个订阅指定了最⼤的QoS等级,服务器根据这些信息分发应⽤消息给客户端。
SUBSCRIBE报⽂拥有固定报头、可变报头、有效载荷。
当服务器收到客户端发送的⼀个SUBSCRIBE报⽂时,必须向客户端发送⼀个SUBACK报⽂响应,同时SUBACK报⽂必须和等待确认的SUBSCRIBE报⽂有相同的报⽂标识符。
寸头发型男
如果服务器收到⼀个SUBSCRIBE报⽂,报⽂的主题过滤器与⼀个现存订阅的主题过滤器相同,那么必须使⽤新的订阅彻底替换现存的订阅。新订阅的主题过滤器和之前订阅的相同,但是它的最⼤QoS值可以不同。与这个主题过滤器匹配的任何现存的保留消息必须被重发,但是发布流程不能中断。
鲨鱼种类
SUBSCRIBE报⽂的有效载荷包含了⼀个主题过滤器列表,它们表⽰客户端想要订阅的主题,SUBSCRIBE报⽂有效载荷中的主题过滤器列表必须是UTF-8字符串。
服务器应该⽀持包含通配符的主题过滤器。如果服务器选择不⽀持包含通配符的主题过滤器,必须拒绝任何包含通配符过滤器的订阅请求。
每⼀个过滤器后⾯跟着⼀个字节,这个字节被叫做服务质量要求(Requested QoS)。它给出了服务器向客户端发送应⽤消息所允许的最⼤QoS等级。
宋晓波结婚MQTT发布消息
PUBLISH控制报⽂是指从客户端向服务器或者服务器向客户端发送⼀个应⽤消息。其实从服务器分发的报⽂给订阅者,也是属于PUBLISH 控制报⽂。
服务质量等级 QoS
QoS的值表⽰应⽤消息分发的服务质量等级保证,在不同的服务质量等级中,PUBLISH控制报⽂的处理⽅式也是不同的,⽽且PUBLISH报⽂的接收者(可以是服务器,也可以是客户端)必须按照根据PUBLISH报⽂中的QoS等级发送对应的应答报⽂。
全球化的好处和坏处QoS值Bit 2Bit 1描述
主人与精灵小姐000最多分发⼀次
101⾄少分发⼀次
210只分发⼀次
-11保留位
MQTT按照这⾥定义的服务质量 (QoS) 等级分发应⽤消息。服务器分发应⽤消息给多个客户端(订阅者)时,每个客户端独⽴处理。从发布者发布消息到接受者,分发的消息服务质量可能是不同的,这取决于订阅者订阅主题时指定的服务质量等级。⽽对于发布者⽽⾔,发布消息时就指定了服务质量等级。
QoS0的PUBLISH控制报⽂
消息的分发依赖于底层⽹络的能⼒。服务器不会发送响应,发布者也不会重试,它在发出这个消息的时候就⽴马将消息丢弃,这个消息可能送达⼀次也可能根本没送达。
发布者必须发送QoS等于0,DUP等于0的PUBLISH报⽂。
在服务器接受PUBLISH报⽂时要将消息分发给订阅该主题(消息)的订阅者。
QoS1的PUBLISH控制报⽂
服务质量确保消息⾄少送达⼀次,甚⾄可能被多次处理。QoS1的PUBLISH报⽂的可变报头中包含⼀个报⽂标识符,需要PUBACK报⽂确认。
发布者在每次发送新的应⽤消息都必须分配⼀个未使⽤的报⽂标识符,在发布消息的同时将消息存储起来,等待服务器的应答,直到从接收者那收到对应的PUBACK报⽂。发送的PUBLISH报⽂必须包含报⽂标识符且QoS等于1,DUP等于0。
⼀旦发布者收到来⾃服务器的PUBACK报⽂后,这个报⽂标识符就可以重复使⽤。
接收者响应的PUBACK报⽂必须包含⼀个报⽂标识符,这个标识符来⾃接收到的PUBLISH报⽂。在发送了PUBACK报⽂之后,接收者必须将任何包含相同报⽂标识符的⼊站PUBLISH报⽂当作⼀个新的消息,并忽略它的DUP标志的值。
QoS2的PUBLISH控制报⽂
这是最⾼等级的服务质量,消息丢失和重复都是不可接受的。使⽤这个服务质量等级会有额外的开销。
QoS2的消息可变报头中有报⽂标识符。
QoS2的PUBLISH报⽂的接收者使⽤⼀个两步确认过程来确认收到。
发送者必须给要发送的新应⽤消息分配⼀个未使⽤的报⽂标识符。发送的PUBLISH报⽂必须包含报⽂标识符且报⽂的QoS等于2,,DUP等于0。
在消息发出去后,需要将这个消息存储起来,⽽且必须将这个PUBLISH报⽂看作是未确认的,直到从接收者那收到对应的PUBREC报⽂。
当发布者收到的PUBREC报⽂后必须发送⼀个PUBREL报⽂。PUBREL报⽂必须包含与原始PUBLISH报⽂相同的报⽂标识符。
⽽且发布者还必须必须将这个PUBREL报⽂看作是未确认的,直到从接收者那收到对应的PUBCOMP报⽂。⼀旦发送了对应的PUBREL报⽂就不能重发这个PUBLISH报⽂。
所以就如下图所⽰,在发布消息的时候,⽴马存储消息,在收到PUBREC报⽂后必须将存储的消息丢
弃掉,然后存储报⽂标识符,与此同时还要将PUBREL报⽂发送出去,最后在收到PUBCOMP报⽂后,才丢弃存储的报⽂标识符。
当然啦,对应分发消息也是⽐较复杂的,它⼀般有两种处理⽅案,每⼀种⽅案都要确保消息有且只有
处理⼀次。
接收者(此处指服务器)响应的PUBREC报⽂必须包含报⽂标识符,这个标识符来⾃接收到的PUBLISH报⽂。
发送PUBREC报⽂后,在收到对应的PUBREL报⽂之前,接收者可以将消息分发给订阅者,但是必须要存储报⽂标识符(⽅案1)。
当然,它在这种情况下,也可以存储消息,直到收到PUBREL报⽂才将消息分发到订阅者(⽅案2)。
⽽当它收到PUBREL报⽂后,它必须发送PUBCOMP报⽂响应发布者,该报⽂必须包含与PUBREL报⽂相同的标识符。
带领英文
与此同时,它可以丢弃存储的报⽂标识符(⽅案1),⽽不必再分发应⽤消息给订阅者。
如果此前没有分发应⽤消息给订阅者(⽅案2),那么此时需要分发应⽤消息给订阅者,然后丢弃消息。
在接收者发送PUBCOMP报⽂之后,接收者必须将包含相同报⽂标识符的任何后续PUBLISH报⽂当作⼀个新的发布。
取消订阅
客户端发送UNSUBSCRIBE报⽂给服务器,⽤于取消订阅主题。
UNSUBSCRIBE报⽂固定报头的第3,2,1,0位是保留位且必须分别设置为0,0,1,0。否则服务器必须认为任何其它的值都是不合法的并关闭⽹络连。具体的描述可以看协议⽂档。
UNSUBSCRIBE报⽂的有效载荷包含客户端想要取消订阅的主题过滤器列表。UNSUBSCRIBE报⽂中的主题过滤器必须是连续打包的UTF-8编码字符串。
UNSUBSCRIBE报⽂的有效载荷必须⾄少包含⼀个主题过滤器列表,⽽且这个主题过滤器是已经被客户端订阅的,否则的话没有订阅也就没有取消订阅⼀说了。如果⼀个UNSUBSCRIBE报⽂没有有效载荷是违反协议的标准的,服务器也不会去处理它。
⽽对于服务器删除了⼀个订阅,那么它将不会再分发该主题的消息到这个客户端中。⽽且它必须完成分发任何已经开始往客户端发送的QoS1和QoS2的消息,以保证消息的服务质量。爱美女性
然后服务器必须发送UNSUBACK报⽂来响应客户端的UNSUBSCRIBE请求。UNSUBACK报⽂必须包含和UNSUBSCRIBE报⽂相同的报⽂标识符。即使没有删除任何主题订阅(客户端取消订阅的主题未被订阅),服务器也必须发送⼀个UNSUBACK响应。
断开连接
DISCONNECT报⽂是客户端发给服务端的最后⼀个控制报⽂。表⽰客户端正常断开连接。
DISCONNECT报⽂的固定报头保留位必须全为0。
客户端发送DISCONNECT报⽂之后必须关闭⽹络连接,不能通过那个⽹络连接再发送任何控制报⽂。
白眉豆
服务端在收到DISCONNECT报⽂时必须丢弃任何与当前连接关联的未发布的遗嘱消息。⽽且当客户端没有关闭⽹络连接的时候服务器应该主动去关闭⽹络连接。

本文发布于:2023-07-01 11:55:04,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1063086.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:消息   服务器   订阅   客户端   主题   发送   过滤器
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图