MQTT 3.1.1,值得升级的6个新特性
前言
以前看英文文章或资料,看完之后,摘要或者忘记。这一次选择感兴趣的MQTT 3.1.1介绍文章资料,引文见文末,作为练手;非完全翻译,去除掉一些广告性描述,若侵权,请告知。
在沉寂了四年之后,QTT 3.1.1规范于2014年10月30号正式发布,与此同时MQTT 3.1.1已成为OASIS(结构化信息标准促进组织)开放物联网消息传递协议标准(连接1 连接2),换种说法就是MQTT 3.1.1已升级为国际物联网标准。
正如HTTP为人们通过万维网分享信息铺平了道路一样,MQTT能将几十亿低成本、嵌入式数据采集遥测设备连接到网络。
与MQTT 3.1(还不是国际物联网标准呢)规范相比,MQTT 3.1.1目标在于消除歧义,尽可能的向后兼容,事实上一些大众所需的新特性被包含在这个版本(更多的是物联网标准推动),因此不仅是一个维护版本,也是一种巨大的进步呢。除了概念的澄清和陈旧规范重写外,有一些很有趣的变化是值得注意的。
会话表示标志(Session Present Flag)
如果一个终端与服务器之间建立一个持久会话连接(假设这个终端没有使用到一个“clean session”标记清除已有回话标志), 一个新增的“Session Present”标志(会话表示标志,逻辑值为true或false)会在CONNACK中出现,表明MQTT服务器已经拥有当前客户端上次连接会话信息,比如订阅的主题,排队信息和其它信息等。
会话表示标志若为true,客户端可减少了一次发送订阅SUBSCRIBLE交互步骤,有助于更有效的数据通信;为false,客户端需要再次发送订阅SUBSCRIBLE消息,不可略过。
新增订阅失败代码反馈
MQTT 3.1.1之前,终端连接之后无法知道其发送的订阅主题是否被MQTT服务器接受与否。此新特性较适用于细粒度权限MQTT主题管理;若无授权,服务器会把错误代码(0x80)附加在SUBACK中,客户端就可以知道订阅失败。
MQTT匿名客户端
需要支持临时或匿名?客户端仅仅需要在发送CONNECT时把客户端标识符( client identifier )置空(零长度)即可,MQTT服务器会为此类请求生成一个随机、唯一客户端标记符。但这要求客户端必须设置Clean Session标记为1,否则服务器端会直接返回包含0x02 (Identifier rejected)代码的CONNACK,同时关闭连接。
可用于后端程序(不需要维护回话状态)向终端发送消息的客户端,MQTT服务器程序可区别对待。
快速发布无等待
这是一个新增的特别有用的特性,客户端可以在发送CONNECT之后,可无须等待MQTT服务器返回的CONNACK,根据需要即刻发送PUBLISH、SUBSCRIBLE、DISCONNEECT等消息,可避免客户端资源等待。此特性也适用于突发模式(burst-mode)客户端需求,只关心数据要尽快的发送出去,而不是去担心是否需要维护一个长连接。
这需要MQTT服务器实现在分发消息之前检查客户端是否有权限发布到这些主题上。
客户端标识符可以变长一些
MQTT 3.1针对客户端标识符( client identifier)限制是23个字节,实际环境下会有所不便,已有遗留系统可能使用UUID作为客户端的标识符,这样服务器端需要做一些彼此之间的MAP映射。 MQTT 3.1.1中上限为65535个字节,毕竟成为业界标准,需要兼容大量的遗留设备和基础设施。
其它小改变
- CONNECT消息可变头部协议名称MQIsdp被改为MQTT,语义更准确
- 所有字符串明确规定使用UTF-8编码,包括客户端标识符(Client Identifier)
- CONNECT消息可变头部协议版本号,由0x03变成了0x04 QoS 0类型PUBLISH消息DUP标记必须被设置为0
- MQTT Over WebSocket 被定义,互联网地址编码分配机构(Internet Assigned Numbers Authority)分配标识符为mqtt。虽在MQTT 3.1规范通篇没有提到WebSocket,但因其二进制属性可以很容易的在WebSocket通道传输。
术语变化
- MQTT代理 -> MQTT服务器(MQTT Broker is now MQTT Server)
- 消息ID -> 包ID(Message ID is now Packet ID)
- 消息类型 -> 包类型(Message Type is now Packet Type)
- 主题路径 -> 主题名称(Subscribe and Unsubscribe take Topic Paths, rather than Topic names)
- 以前在固定头部,现在在包类型中( Flags in the fixed header are now specific to the packet type
- 0字节保留信息需要清除 (A zero byte retained message MUST NOT be stored as a retained message on the Server )
小结
当前MQTT 3.1.1已经在很多活跃开源项目/商业产品得到支持。比如Eclipse Paho,Mosquitto,JBoss A-MQ 6.1, Apache ActiveMQ 5.10-SNAPSHOT,Apache Camel 2.13.0,HiveMQ等。
关于Eclipse Paho:
- Eclipse Paho 1.0支持MQTT 3.1.1和MQTT 3.1规范
- Eclipse Paho 0.9仅支持 MQTT 3.1规范
包含MQTT 3.1.1和MQTT 3.1的客户端可以混合使用,彼此可以共存于同一个MQTT服务器下,在基本消息传输层面没有多大修改,同样的PUBLISH消息可以在MQTT客户端中自由流转,这个需要服务器端编码支持。
已有的MQTT 3.1客户端可以用着急升级,但升级之后可以从新增特性中收益良多。
引用
- 6 facts why it’s worth upgrading to the brand new MQTT 3.1.1 version
- Differences between 3.1.0 and 3.1.1
- other ……
MQTT 3.1.1,值得升级的6个新特性的更多相关文章
- SQL Server 2016最值得关注的10大新特性
全程加密技术(Always Encrypted) 全程加密技术(Always Encrypted)支持在SQL Server中保持数据加密,只有调用SQL Server的应用才能访问加密数据.该功能支 ...
- C# 8.0的三个值得关注的新特性
本文翻译自:https://dzone.com/articles/3-new-c-8-features-we-are-excited-about 转载请注明出自:葡萄城官网,葡萄城为开发者提供专业的开 ...
- Angular4.0.0正式发布,附新特性及升级指南
本文首发地址:Angular4.0.0正式发布,附新特性及升级指南 作者|孙薇 编辑|尾尾 经历了6个RC版本之后,Angular项目组终于发布了新版,即正式版 Angular 4.0.0.新版的 A ...
- Node 12 值得关注的新特性
前言 时隔一年,Node.js 12 如约而至,正式发布第一个 Current 版本. 该版本带来了诸如: V8 更新带来好多不错的特性. HTTP 解析速度提升. 启动速度大幅提升. 更好的诊断报告 ...
- CSS3 值得称赞新特性
Html5和CSS3相信大家现在都已不陌生了吧,但CSS3哪些新特性值得我们去称赞呢? 首先还是让大家来看几张效果图,相信大家看到这些效果图,肯定会说这些效果只用CSS是如何实现的呢? 1.3D正方形 ...
- Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth
Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1 Python 3_x 新特性1 python3.4新特性1 python3.5新特性1 值得关注的新特性1 ...
- PHP 7 值得期待的新特性(上)
这是我们期待已久的 PHP 7 系列文章的第一篇. 或许你已经知道了,我在 PHP 5.0.0 时间轴 提的 RFC (Request For Comments)通过了, PHP 7 成为 PHP 下 ...
- Swift 2.0初探:值得注意的新特性
转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...
- 如何升级laravel5.4到laravel5.5并使用新特性?
如何升级laravel5.4到laravel5.5并使用新特性? 修改composer.json: "laravel/framework": "5.5.*", ...
随机推荐
- 【转载】 BN(batch normalization)
原文地址: https://blog.csdn.net/qq_35608277/article/details/79212700 ----------------------------------- ...
- 使用apidoc 生成Restful web Api文档——新手问题与解决方法
使用apidoc工具来给项目做接口文档,不仅有合理的源码注释,还可以生成对应的文档.是给源码写备注的一个极佳实践. 工具名称:apiDoc Git地址:https://github.com/apido ...
- parson json解析
最近交互数据中用到JSON数据,很多年以前用过CJSON解析和生成JSON数据,貌似CJSON已经发展成为了libjson,本打算用libjson库,不过其提供的解析JSON方式采用了回调,是测试过程 ...
- HDU - 5130 :Signal Interference (多边形与圆的交)
pro:A的监视区域是一个多边形. 如果A的监视区的内满足到A的距离到不超过到B的距离的K倍的面积大小.K<1 sol:高中几何体经验告诉我们满足题意的区域是个圆,那么就是求圆与多边形的交. # ...
- FZU软工第十一次作业-软件产品案例分析
目录 前言: 第一部分.调研,评测: 1.1.初次感觉: 1.2.企业号bug: 1.3.你觉得为什么这个产品组的人没有发现这些bug: 1.4.假设你们团队需要开发这套系统,需要注意哪些方面: 2. ...
- HDU 1425 sort C语言实现快速排序
AC代码:sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 一个简易的drf的项目例子
luffy_city 1.项目介绍 今日内容:(路飞项目) contentType组件: 路飞学成项目,有课程,学位课(不同的课程字段不一样),价格策略 问题, 如何设计表结构,来表示这种规则 为专题 ...
- Spring 中的接口知识整理
本想每个小知识一篇随笔,但是那样,看起来有些单薄,所以,就放在一片文章里了.而且,以后还会慢慢在最后不断的追加. 目录: FactoryBean BeanPostProcessor 1.Factory ...
- 工作记录 - OBB的解决方案
之前关于OBB的内容: Android上使用native IO 最近工作中的问题笔记 工作记录[续] android OBB 自从用了Java来mount OBB, 再也没有遇到挂载的问题. 但最近在 ...
- oracle修改字符集方法
查看源数据库字符集 在sql命令行执行,即可查看 cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6 例如我的返回结果为0362,对照以 ...