[译] 你应该升级 MQTT3.1.1 的6个理由
原文 6 facts why it’s worth upgrading to the brand new MQTT 3.1.1
version
摘要:新版 MQTT 3.1.1 终于在 2014 年 10 月 30 日推出了。尽管大部分改动看着不明显,其实性能已经向前迈进一大步。本文将对比 MQTT 3.1和 3.1.1 的区别并详细介绍。
1. 会话表示标识
如果一个终端与服务器之间建立一个持久会话连接(假设这个终端没有使用到 clean session 来清除已有会话标识),那么会在CONNACK中引入额外的标识 Session Present Flag。
表明MQTT服务器已经拥有当前客户端上次连接会话信息,例如 订阅的主题,排队信息以及其他信息。
逻辑值分为true 和 false。若为true, 客户端可以减少一次发送订阅Subscribe的交互步骤,更有效率的通信,若为false, 客户端需要再次发送Subscribe信息
2. 订阅失败代码反馈
之前的几个版本,客户端无法知道其发送的订阅主题是否被MQTT broker 接受。 这个特性的加入使得MQTT主题管理的权限更加精细化。若无授权,服务器会将错误代码(0x80)附加在SUBACK中,这样客户端就知道订阅失败了。
3. 匿名MQTT客户端
如果你的案例需要临时的或者匿名的MQTT客户端,现在也可以做到了。客户端现在仅仅需要在发送CONNECT的时候将客户端标识符置空即可。MQTT 服务器会随机分配一个客户端标识符。 这对于一些只要Publish的客户端非常有用。
4. 快速发布,无须等待
一个非常有趣的新特性,客户端能够在等到MQTT服务器发回CONACK之前发布消息。
这让一些小型的紧凑型的MQTT客户端可以CONNECT,PUBLISH 和 DISCONNECT,而无须等待MQTT服务器返回的确认码。这一特性对于突发模式的客户端(只关心数据尽快发出,而不是担心是否要维护一个长连接)同样适用。
当然,这需要MQTT服务器实现在分发消息之前检查客户端是否有权限发布到这些主题上。
5. 更长的客户端标识符
MQTT 3.1 的版本,对于客户端标识符的限制是23字节,十分不方便也带来不少麻烦。
MQTT 3.1.1 中,将客户端标识符的上限设为65535 字节。
- 其他小的改动
- CONNECT消息可变头部协议名称MQIsdp被改为MQTT,花销两个字节使得整个协议名更好读。
- 所有字符串使用UTF-8编码
- 协议级别 由3字节增加到4字节
- MQTT over websockets 被定义,IANA分配标识符为mqtt
关于译者
左昱骐,云巴工程师,南安普顿大学硕士。云巴是基于 MQTT 的实时消息系统。
[译] 你应该升级 MQTT3.1.1 的6个理由的更多相关文章
- Php:学习笔记(一):版本选择
(注:本文来自网络) 超过75%的网站使用了PHP作为开发语言,wordpress,phpmyadmin和其他一些开源项目的盛行,带来了一大批的长尾用户.然而,他们一般安装之后却很少升级.下图是目前P ...
- XA 事务
4.11.3 什么是XA 事务? <数据库程序员面试笔试宝典>第4章数据库基础,本章主要介绍数据库基础部分的面试题,比较适合应届毕业生,也适合由其他岗位转数据库岗位的人员.本节为大家介绍什 ...
- 译图智讯VIN码识别助力汽配商转型升级
汽配猫是上海佳驰经合能源科技有限公司自主开发的汽车配件B2B网上商城及服务平台,该平台依托互联网云技术.利用创新的商业模式及互联网思维,整合汽配产业链优秀资源,为汽车维修保养企业等产业链各方面提供汽配 ...
- [译]:Orchard入门——构建你的第一个Orchard网站
原文链接:Building Your First Orchard Site 文章内容基于Orchard 1.8版本 本文将逐步简要介绍Orchard提供的功能.如果你是第一次使用Orchard,本文将 ...
- 升级react 15.4,常见的错误及解决方案
最近项目由react0.14.X升级到react 15版本,因为react15还是做了一些相对大一点的更新的(详情可以参考一下我的另一篇文章关于react15的一点总结),相对:来说react升级之后 ...
- 解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译)
解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译) http://improve.dk/automated-testing-of-orcamdf-against ...
- [译]关于.NET Core1.1的通告
以下翻译可能会有不准确的地方, 想看原文的童鞋移步到Announcing .NET Core 1.1, 微软的开源真心喜欢, 希望有更多的童鞋关注微软, 关注.NET Core 我们很兴奋地宣布.NE ...
- [译] Python 3.5 协程究竟是个啥
转自:http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 ...
- C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准)
C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准) [美]Stanley B. Lippman( 斯坦利李普曼) Josee Lajoie(约瑟拉乔伊 ) B ...
随机推荐
- 关于cnas培训
关于cnas(2014-12-9----2014-12-12) 目的:完成内审相关知识培训,可以做一个合格的内审人员 过程: 1.为什么会存在实验室 2.iso9000是怎么产生的,以及存在的意义 3 ...
- 在linux下挂载、卸载U盘
首先你得保证你的U盘的格式是fat格式. 先进入/mnt/目录新建一个usb目录 cd /mnt/ mkidr usb 先fdisk -l,然后插上U盘,fdisk -l 查看是否有新的硬盘添加上来了 ...
- Eclipse中用Logcat调试程序
调试程序的一种方法是用Logcat程序,在Eclipse中windows->show view->other->android->logcat可打开. 然后程序加入androi ...
- WCF中因序列化问题引起的异常和错误。
尝试对参数 http://tempuri.org/ 进行序列化时出错: parameters.InnerException 消息是“不应为数据协定名称为“DBNull:http://schemas.d ...
- Oracle数据库入门——如何根据物化视图日志快速刷新物化视图
Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构:SQL& ...
- 基于SWFUpload的angular上传组件
回顾 由于工作内容比较多,特别是架构方面,需要耗费很多的时间调整.重构,因此很久没有写文章了. 话就不多说了,直接进入主题. 实现 首先分析一下SWFUpload初始化的时候,需要传入当前触发上传的元 ...
- zepto - reduce
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce var ss ...
- codeforce A. Design Tutorial: Learn from Math
题意:将一个数拆成两个合数的和, 输出这两个数!(这道题做的真是TMD水啊)开始的时候不知道composite numbers是啥意思,看了3遍才看懂.... 看懂之后又想用素数筛选法来做,后来决定单 ...
- uboot命令及内核启动参数
修改:mw [内存地址] [值] [长度] 例如:mw 0x02000000 0 128 表示修改地址为0x02000000~0x02000000+128的内存值为0. 显示:md [内存地址 ...
- android基础---->JSON数据的解析
上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...