一文了解MQTT协议( 二 )

固定报头格式如下

一文了解MQTT协议

文章插图
 
固定报头的0-3位为标志位 , 第一字节的4-7位的值指定了报文类型 。
报文类型值描述CONNECT1客户端向代理发起连接请求CONNACK2连接确认PUBLISH3发布消息PUBACK4发布确认PUBREC5发布收到(QoS2)PUBREL6发布释放(QoS2)PUBCOMP7发布完成(QoS2)SUBSCRIBE8客户端向代理发起订阅请求SUBACK9订阅确认UNSUBSCRIBE10取消订阅UNSUBACK11取消订阅确认PINGREQ12PING请求PINGRESP13PING响应DISCONNECT14断开连接
实际上 这些类型也是 MQTT协议中定义的一些方法(也被称为动作) , 来于表示对确定资源所进行操作 。这个资源可以代表预先存在的数据或动态生成数据 , 这取决于服务器的实现 。通常来说 , 资源指服务器上的文件或输出 。
MQTT协议实现方式实现MQTT协议需要客户端和服务器端通讯完成 , 在通讯过程中 , MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe) 。其中 , 消息的发布者和订阅者都是客户端 , 消息代理是服务器 , 消息发布者可以同时是订阅者 。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
1)Topic , 可以理解为消息的类型 , 订阅者订阅(Subscribe)后 , 就会收到该主题的消息内容 (payload)
2)payload , 可以理解为消息的内容 , 是指订阅者具体要使用的内容(限制大小) 。
MQTT 基于订阅与发布的消息模型MQTT 消息发送与接收的流程:
  • ClientA 链接到 Broker;
  • ClientB 链接到 Broker , 并订阅主题 Topic1;
  • ClientA 发送给 Broker 一条消息 , 主题为 Topic1;
  • Broker 收到 ClientA 的消息 , 发现 ClientB 订阅了 Topic1 , 而后将消息转发到 ClientB;
  • ClientB 从 Broker 接收到该消息 。
和传统的队列有点不一样 , 若是 ClientB 在 ClientA 发布消息以后再订阅 Topic1 , ClientB 不会收到该条消息 。
关于 MQTT 的基础 , 阿粉就了解了这么多了 , 等以后阿粉学习新的关于 MQTT 的 , 阿粉再继续分享给大家 。




推荐阅读