netty实现mtqq_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上

本文详细介绍了MQTT协议的诞生、优势、发布/订阅架构以及适用人群,解析了MQTT控制报文的结构,包括固定报头、可变报头和有效载荷。此外,还探讨了Netty实现MQTT协议的关键报文,如PUBLISH、PUBACK等,为构建高性能IoT服务器奠定了基础。
摘要由CSDN通过智能技术生成

前言

诞生及优势

MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道。目标是拥有一个带宽有效且使用很少电池电量的协议,因为这些设备是通过卫星链路连接的,当时这种设备非常昂贵。与HTTP及其请求/响应范例相比,该协议使用发布/订阅体系结构。发布/订阅是事件驱动的,可以将消息推送到客户端。中央通信点是MQTT代理,它负责调度发送者和合法接收者之间的所有消息。向代理发布消息的每个客户端都在消息中包含一个主题。主题是代理的路由信息​。每个想要接收消息的客户端都订阅某个主题,并且代理将具有匹配主题的所有消息传递给客户端。因此,客户不必彼此了解,他们只通过主题进行通信。该架构支持高度可扩展的解决方案,而不依赖于数据生产者和数据使用者。

发布/订阅架构

与HTTP的区别在于客户端不必提取所需的信息,但是在有新内容的情况下,代理会将信息推送到客户端。因此,每个MQTT客户端都与代理具有永久打开的TCP连接。如果此连接在任何情况下中断,MQTT代理可以缓冲所有消息,并在它重新联机时将它们发送到客户端。如前所述,MQTT中用于分派消息的核心概念是主题。主题是一个简单的字符串,可以有更多的层次结构级别,用斜杠分隔。用于发送起居室的温度数据的示例主题可以是房屋/起居室/温度。一方面,客户端可以订阅确切的主题,或者另一方面使用通配符。对房屋/ + /温度的订阅将导致所有消息发送到先前提到的主题房屋/起居室/温度以及在起居室的地方具有任意值的任何主题,例如房屋/厨房/温度。加号是单级通配符,只允许一个层次结构的任意值。如果您需要订阅多个级别,例如订阅整个子树,还有一个多级通配符(#)。它允许订阅所有底层层次结构级别。比如房子/#订阅以house开头的所有主题。

适用人群

以下内容需要你对照着MQTT协议内容仔细推敲

推荐资源:

MQTT控制报文格式

MQTT控制报文结构

结构备注

Fixed header

固定报头,所有控制报文都包含

Variable header

可变报头,部分控制报文包含

Payload

有效载荷,部分控制报文包含

固定报头 Fixed header

+-----+-----+-----+-----+-----+------+------+------+-------+

|     |     |     |     |     |     |     |     |       |

| Bit | 7 | 6 | 5 | 4 | 3   | 2   | 1   | 0   |

+-----------+-----+-----+------------+------+------+-------+

|     |                       |                           |

|byte1|MQTT ControlPacket type|         Flags             |

+----------------------------------------------------------+

|     |                                                   |

|byte2|         Remaining Length                         |

+----------------------------------------------------------+

控制报文类型(MQTT Control Packet type)

名字值报文流动方向描述

Reserved

0

禁止

保留

CONNECT

1

客户端到服务端

客户端请求连接服务端

CONNACK

2

服务端到客户端

连接报文确认

PUBLISH

3

两个方向都允许

发布消息

PUBACK

4

两个方向都允许

QoS 1消息发布收到确认

PUBREC

5

两个方向都允许

发布收到(保证交付第一步)

PUBREL

6

两个方向都允许

发布释放(保证交付第二步)

PUBCOMP

7

两个方向都允许

QoS 2消息发布完成(保证交互第三步)

SUBSCRIBE

8

客户端到服务端

客户端订阅请求

SUBACK

9

服务端到客户端

订阅请求报文确认

UNSUBSCRIBE

10

客户端到服务端

客户端取消订阅请求

UNSUBACK

11

服务端到客户端

取消订阅报文确认

PINGREQ

12

客户端到服务端

心跳请求

PINGRESP

13

服务端到客户端

心跳响应

DISCONNECT

14

客户端到服务端

客户端断开连接

Reserved

15

禁止

保留

标志(Flags)

控制报文固定报头标志Bit 3Bit 2Bit 1Bit 0

CONNECT

Reserved

0

0

0

0

CONNACK

Reserved

0

0

0

0

PUBLISH

Used in MQTT 3.1.1

DUP1

QoS2

QoS2

RETAIN3

PUBACK

Reserved

0

0

0</

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值