• MQTT协议(一)——协议介绍与控制报文格式


    一、协议介绍

    MQTT协议可以理解为一个类似于kakfa或者rocketmq这种中间件的形式。它主要功能就是可以实现发布和订阅。

    不同的客户端去跟客户端连接,然后就可以订阅一些主题(topic),有些客户端如果发布了这些主题,这些订阅的都能收到。

    实用场景举例: 

    比如一个楼中的人都想在手机上每天收到自己楼内的温度,

    楼内住户的手机作为客户端(client),连接到服务端(mqttbroker),然后订阅(subscribe)温度这个主题,

    测量温度设备作为一个客户端(client),在连接到服务端后推送(publish)温度主题(topic)到服务器,

    服务端收到消息后,再发送推送报文给这些订阅的客户端,也就是楼内人的手机,就实现温度推送这个功能了。

    这些连接、发布、订阅、断开等等操作,都需要特定的报文来实现(这也是协议存在的意义,定规矩)

    MQTT规范定义了十四种不同类型的控制报文,来实现上诉各个功能。

    二、控制报文格式

     主要分三个部分:固定头(Fixed header)+可变头(Variable header)+有效载荷(Payload)

    1.固定头

    固定头第一个字节byte(一个字节由8位二进制数组成)的前4位值对应不同报文类型,具体值对应如下:

    后4个字节用于指定控制报文类型的标志位,目前就publish用到了,这四个字节分别对应:

    • DUP1 =控制报文的重复分发标志
    • QoS2 = PUBLISH报文的服务质量等级
    • QoS2 = PUBLISH报文的服务质量等级
    • RETAIN3 = PUBLISH报文的保留标志

    2.可变报文头

    某些MQTT控制报文包含一个可变报头部分。它在固定报头和负载之间。可变报头的内容根据报文类型的不同而不同。可变报头的报文标识符(Packet Identifier)字段存在于在多个类型的报文里。

    这个报文标识符用来唯一标识一条报文,可以理解为报文的id。

    这东西在重发和答复的时候都会用到,如果你是重发报文,那这个标识符要跟之前的报文一样,如果你要答复某个报文,那答复报文里的标识符要跟你答复的那个报文一样。在答复完成后,这个id就可以被释放重新用了。

    很多控制报文的可变报头部分包含一个两字节的报文标识符字段。这些报文是PUBLISH(QoS > 0时), PUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE, SUBACK,UNSUBSCRIBE,UNSUBACK。

    QoS 1的PUBLISH对应的是PUBACK,QoS 2的PUBLISH对应的是PUBCOMP,与SUBSCRIBE或UNSUBSCRIBE对应的分别是SUBACK或UNSUBACK。

    记忆的诀窍就是,凡是需要答复的和答复报文,都必须有报文标识符。

    3.有效载荷

    这个就是通常理解的报文体了,业务数据就是在这里头。

    不是所有的报文都需要有效载荷的。

  • 相关阅读:
    java cp命令
    Ubuntu相关IP配置(转)
    (转)Linux操作系统下VMware的多网卡桥接转换
    Linux问题FAQ1
    hadoop运行常见问题FAQ
    hadoop运行故障问题解决1——datanode节点启动后自动关闭
    Java程序设计9——泛型
    一道灵活的css笔试题
    inherit与auto
    再谈visibility:hidden和display:none
  • 原文地址:https://www.cnblogs.com/pandaNHF/p/14102538.html
Copyright © 2020-2023  润新知