Mqtt协议在设计时,尽可能的做到了消息的精简,这种精简体现在协议的多个方面,如下面介绍所示。

Remaining Length

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

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

编码方案:

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

解码方案:

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

消息ID

设计原理:

  1. 只有某些类型的消息需要设置消息ID,即需要时才进行设置;
  2. 消息ID最多2个Byte,且可以重复使用;

Clean Session

  设计思想:弱网环境或者设置资源有限时,订阅方客户端不需要每次重新建立连接后重新进行订阅,当将Clean Session设置为false时,有Broker将订阅关系保存在session中,客户端重连时无需进行订阅,使用session中保存的订阅关系即可。

参考:http://www.steves-internet-guide.com/mqtt/

Mqtt精髓系列之精简之道相关推荐

  1. SQL优化三板斧:精简之道、驱动为王、集合为本

    黄浩 2016-11-16 10:24:08 作者介绍 黄浩,现任职于中国惠普,从业十年,始终专注于SQL.在华为做项目的两年多,做过大大小小的SQL多达1500个.闲暇之余,喜欢将部分案例写成博客发 ...

  2. 收藏长文|Java 代码精简之道

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 阿里巴巴中间件 古语有云: 道为术之灵,术为道 ...

  3. Java 代码精简之道 | 长文

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术群 来源:阿里巴巴中间件 古语有云: 道为术之灵,术为道之体:以道统 ...

  4. Java代码精简之道

    前言 古语有云: 道为术之灵,术为道之体:以道统术,以术得道. 其中:"道"指"规律.道理.理论","术"指"方法.技巧.技术&q ...

  5. Java 代码精简之道 侵删

    前言 古语有云: 道为术之灵,术为道之体:以道统术,以术得道. 其中:"道"指"规律.道理.理论","术"指"方法.技巧.技术&q ...

  6. android cm12 截屏,CM系列ROM精简列表 可删软件服务汇总

    本文主要介绍CM系列ROM精简列表,告诉大家哪些软件服务可以删,哪些是绝对不能删. 1.精简程序之前,系统必须先获取root权限 2.系统自带的软件都存放在/system/app目录下,用RE进去可以 ...

  7. Deepin XP V5系列完美精简版合集

    Deepin XP V5系列完美精简版合集(fs2you下载) 文件:618m  7e19229e7ed6260a4d608243b23eccbf  DeepinXP-V5.iso 下载:http:/ ...

  8. [转载](家常菜系列)教你几道八大菜系中的佳肴做法

    原文地址:(家常菜系列)教你几道八大菜系中的佳肴做法 作者:水儿清浅浅 十二道经典东北菜(图解)http://blog.sina.com.cn/s/blog_4b6c190c01009z8m.html ...

  9. 遗言 - MQTT 核心系列:第九章

    遗言 - MQTT 核心系列:第九章 欢迎来到MQTT核心系列的第九章.这个系列一共有十章,用来介绍MQTT的核心特性和概念.在这一章,我们将讲解MQTT中的遗言特性. 因为MQTT会运行在网络不好的 ...

最新文章

  1. 用友公司Java面试题(含答案)
  2. Ubuntu mysql数据库导入sql文件
  3. 080703 雨&星巴克的菜单
  4. Proactor设计模式
  5. spring Aop实现身份验证和springboot异常统一处理
  6. 计算机网络 --- 数据交换方式
  7. iMazing有哪些好用的功能
  8. 【广州-互联网-Node.js招聘】
  9. 财务人员懂计算机语言,评论:用电算化促财务管理的现代化
  10. sin1用计算机怎么算,sin1等于多少?
  11. 能量英语(三) 之 “情感把控 II ”
  12. 衡量现金分红收益率的指标——股息率
  13. 笔记三、最大数字(C++)
  14. CPU和内存的电路设计01-非门电路
  15. WRF后处理/Python处理nc数据与可视化/极坐标网格绘制(Cartopy、netcdf4)——以北极雪水当量数据为例
  16. BIGO 的数据管理与应用实践
  17. 分享技术人学习有用的国外网站
  18. 记Ambari试安装
  19. 微服务下,简单实现数据变更通知
  20. 【利用WebServices实现泛微OA周期待办任务提醒】

热门文章

  1. 【教程】关于打开一些exe文件时,打开方式为microsoft store的解决办法
  2. 数控技能大赛计算机程序员,广西选手获第九届全国数控技能大赛数控程序员赛项一等奖...
  3. 信息学奥赛知识点(一)—计算机基础知识【转载】
  4. XtraReport数据绑定模式比较
  5. [kubernetes]-Pod无法通过 Service IP 访问自身
  6. 数据库期末复习(1-5章)
  7. 胡须清洗的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 如何让linux自动调整时间同步,如何让Linux时间与internet时间同步(CentOS)?
  9. 事态升级管理程序范本_项目管理事态升级流程
  10. 海天MA3200Ⅱ/1700卧式_节能注塑机