Mqtt精髓系列之精简之道
2017-12-15 20:19
330 查看
Mqtt协议在设计时,尽可能的做到了消息的精简,这种精简体现在协议的多个方面,如下面介绍所示。
比如,十进制128=0+1x128,可以用2个Byte表示,低位字节表示的数据为0,由于存在另一个字节,低位字节的最高位置为1,即0x80;高位字节表示的数据为1,且没有后续字节,因此为0x01。
编码方案:
解码方案:
只有某些类型的消息需要设置消息ID,即需要时才进行设置;
消息ID最多2个Byte,且可以重复使用;
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中保存的订阅关系即可。相关文章推荐
- Mqtt精髓系列之安全
- Mqtt精髓系列之服务质量Qos
- Mqtt精髓系列之心跳机制
- Mqtt精髓系列之预备知识
- Mqtt精髓系列之发布订阅
- Mqtt精髓系列之保留消息Retained Messages
- win8专业版精简优化系列(32位+64…
- win8专业版精简优化系列(32位+64…
- 51系列小型操作系统精髓 简单实现
- 51系列小型操作系统精髓 简单实现2
- [原]精简高效CSS系列之二——浮动float
- 你比老师强--系列三!精髓和难点~想学英语必看
- win8专业版精简优化系列(32位+64…
- 51系列小型操作系统精髓 简单实现3
- [原]精简高效CSS系列之二——浮动float
- win8专业版精简优化系列(32位+64…
- iOS7 by Tutorials》系列:iOS7的设计精髓(上)
- 51系列小型操作系统精髓 简单实现7 C语言版待改进
- 51系列小型操作系统精髓 简单实现8 C语言版待改进
- 51系列小型操作系统精髓 简单实现12 C语言版再优化