您的位置:首页 > 编程语言 > Qt开发

Mqtt精髓系列之精简之道

2017-12-15 20:19 330 查看
  Mqtt协议在设计时,尽可能的做到了消息的精简,这种精简体现在协议的多个方面,如下面介绍所示。

Remaining Length

  设计思想:采用变长度编码方案,最多采用4 Byte表示256MB数据。采用可变长度的好处是信息量少时采用的字节数也少。每个字节的低7位用于编码数据,最高位是标志位,用于指示是否有更多的字节,最低有效位在前,最高有效位最后。

比如,十进制128=0+1x128,可以用2个Byte表示,低位字节表示的数据为0,由于存在另一个字节,低位字节的最高位置为1,即0x80;高位字节表示的数据为1,且没有后续字节,因此为0x01。

编码方案:

do
encodedByte = X MOD 128
X = X DIV 128
// if there are more data to encode, set the top bit of this byte
if ( X > 0 )
encodedByte = encodedByte OR 128
endif
'output' encodedByte
while ( X > 0 )


解码方案:

multiplier = 1
value = 0
do
encodedByte = 'next byte from stream'
value += (encodedByte AND 127) * multiplier
multiplier *= 128
if (multiplier > 128*128*128)
throw Error(Malformed Remaining Length)
while ((encodedByte AND 128) != 0)


消息ID

设计原理:

只有某些类型的消息需要设置消息ID,即需要时才进行设置;

消息ID最多2个Byte,且可以重复使用;

Clean Session

  设计思想:弱网环境或者设置资源有限时,订阅方客户端不需要每次重新建立连接后重新进行订阅,当将Clean Session设置为false时,有Broker将订阅关系保存在session中,客户端重连时无需进行订阅,使用session中保存的订阅关系即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: