Mqtt精髓系列之精简之道
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
设计原理:
- 只有某些类型的消息需要设置消息ID,即需要时才进行设置;
- 消息ID最多2个Byte,且可以重复使用;
Clean Session
设计思想:弱网环境或者设置资源有限时,订阅方客户端不需要每次重新建立连接后重新进行订阅,当将Clean Session设置为false时,有Broker将订阅关系保存在session中,客户端重连时无需进行订阅,使用session中保存的订阅关系即可。
参考:http://www.steves-internet-guide.com/mqtt/
Mqtt精髓系列之精简之道相关推荐
- SQL优化三板斧:精简之道、驱动为王、集合为本
黄浩 2016-11-16 10:24:08 作者介绍 黄浩,现任职于中国惠普,从业十年,始终专注于SQL.在华为做项目的两年多,做过大大小小的SQL多达1500个.闲暇之余,喜欢将部分案例写成博客发 ...
- 收藏长文|Java 代码精简之道
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 阿里巴巴中间件 古语有云: 道为术之灵,术为道 ...
- Java 代码精简之道 | 长文
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术群 来源:阿里巴巴中间件 古语有云: 道为术之灵,术为道之体:以道统 ...
- Java代码精简之道
前言 古语有云: 道为术之灵,术为道之体:以道统术,以术得道. 其中:"道"指"规律.道理.理论","术"指"方法.技巧.技术&q ...
- Java 代码精简之道 侵删
前言 古语有云: 道为术之灵,术为道之体:以道统术,以术得道. 其中:"道"指"规律.道理.理论","术"指"方法.技巧.技术&q ...
- android cm12 截屏,CM系列ROM精简列表 可删软件服务汇总
本文主要介绍CM系列ROM精简列表,告诉大家哪些软件服务可以删,哪些是绝对不能删. 1.精简程序之前,系统必须先获取root权限 2.系统自带的软件都存放在/system/app目录下,用RE进去可以 ...
- Deepin XP V5系列完美精简版合集
Deepin XP V5系列完美精简版合集(fs2you下载) 文件:618m 7e19229e7ed6260a4d608243b23eccbf DeepinXP-V5.iso 下载:http:/ ...
- [转载](家常菜系列)教你几道八大菜系中的佳肴做法
原文地址:(家常菜系列)教你几道八大菜系中的佳肴做法 作者:水儿清浅浅 十二道经典东北菜(图解)http://blog.sina.com.cn/s/blog_4b6c190c01009z8m.html ...
- 遗言 - MQTT 核心系列:第九章
遗言 - MQTT 核心系列:第九章 欢迎来到MQTT核心系列的第九章.这个系列一共有十章,用来介绍MQTT的核心特性和概念.在这一章,我们将讲解MQTT中的遗言特性. 因为MQTT会运行在网络不好的 ...
最新文章
- 用友公司Java面试题(含答案)
- Ubuntu mysql数据库导入sql文件
- 080703 雨&星巴克的菜单
- Proactor设计模式
- spring Aop实现身份验证和springboot异常统一处理
- 计算机网络 --- 数据交换方式
- iMazing有哪些好用的功能
- 【广州-互联网-Node.js招聘】
- 财务人员懂计算机语言,评论:用电算化促财务管理的现代化
- sin1用计算机怎么算,sin1等于多少?
- 能量英语(三) 之 “情感把控 II ”
- 衡量现金分红收益率的指标——股息率
- 笔记三、最大数字(C++)
- CPU和内存的电路设计01-非门电路
- WRF后处理/Python处理nc数据与可视化/极坐标网格绘制(Cartopy、netcdf4)——以北极雪水当量数据为例
- BIGO 的数据管理与应用实践
- 分享技术人学习有用的国外网站
- 记Ambari试安装
- 微服务下,简单实现数据变更通知
- 【利用WebServices实现泛微OA周期待办任务提醒】
热门文章
- 【教程】关于打开一些exe文件时,打开方式为microsoft store的解决办法
- 数控技能大赛计算机程序员,广西选手获第九届全国数控技能大赛数控程序员赛项一等奖...
- 信息学奥赛知识点(一)—计算机基础知识【转载】
- XtraReport数据绑定模式比较
- [kubernetes]-Pod无法通过 Service IP 访问自身
- 数据库期末复习(1-5章)
- 胡须清洗的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 如何让linux自动调整时间同步,如何让Linux时间与internet时间同步(CentOS)?
- 事态升级管理程序范本_项目管理事态升级流程
- 海天MA3200Ⅱ/1700卧式_节能注塑机