MQTT 3.1和3.1.1版的区别

MQTT 3.1和3.1.1版的区别


在3.1.1版中,主要的改变有6个:

1)Session Present Flag

    如果客户端使用持久会话进行连接(这意味着客户端不使用干净的会话),那么在CONNACK消息会引入一个额外的标志,以指示该Broker代理已经有了与客户端早先的会话信息(比如客户端订阅信息、队列消息活其他信息)。这是一个重要的新功能,它可以实现更高效的通信。现在,客户端得到反馈,如果Broker经纪人已经有了客户端的订阅,如果标志设置为false,那么客户端只需订阅新主题。

2)失败订阅的附加错误码

    在MQTT 3.1.1之前,客户端要查询自己的订阅是否被Broker经纪人批准,这是不可能的。这种情况在采用细粒度权限的MQTT主题管理时就可能出现。在3.1.1版新规范中,在MQTT SUBACK消息中新增了一个错误码0x80,让​​客户端知道自己的订阅是否被禁止。

3)匿名MQTT客户端

    如果使用场景需要临时的或匿名的MQTT客户端,在3.1.1版得到支持,可以设置MQTT客户端标识符为零字节长度。那么MQTT的Broker会自动分配给客户端一个临时的随机标识符。这一个特性非常有用,尤其是当客户端只需做发布、不需要订阅的情况,此时客户端无需做基于客户端ID的授权。

4)即时发布或不等待响应的突发MQTT消息

    3.1.1版为MQTT客户端设计了一个非常有趣的新功能,那就是客户端可以直接发送MQTT PUBLISH消息而无需等待Broker的CONNACK响应。这非常适用于微型、受限的MQTT客户端做连接CONNECT、发布PUBLISH、断开DISCONNECT,而不需要处理来自Broker的响应的情况。这也适用于只关心尽可能发送数据而不维持长时间TCP连接的处于突发模式的客户端。当然,成熟的Broker在检查客户端是否被允许发布到这些主题之前,是不会发布消息的。

5)客户端ID可以很长

    在MQTT 3.1版,每个客户ID不能超过23字节,这一点非常不方便,并能导致许多麻烦,例如客户端标识符要使用UUID的场景。在3.1.1版,Broker可以使用65535字节的客户端ID。

6)其他低级别的更改

    在CONNECT的Header报头中,协议名从MQIsdp改为MQTT。这节省了两字节的开销,并使得协议名称更易读。
所有的字符串编码现在统一为UTF-8。
    协议级字节从3字节增加到4字节。
    在WebSockets上的MQTT通信(MQTT over WebSockets)现在终于确定。在IANA的标识符是mqtt。

注:IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)是负责协调一些使Internet正常运作的机构。由于Internet已经成为一个全球范围的不受集权控制的网络,为了使网络在全球范围内协调一致,有对互联网一些关键的部分达成技术共识的需要,这就是IANA的任务。

推荐使用MQTT 3.1.1。

你可能感兴趣的:(MQTT,mqtt)