[译] 你应该升级 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 ...
随机推荐
- [转载]CSS教程:实例讲解定位Position
http://www.missyuan.com/thread-395406-1-1.html 1. position:static 所有元素的默认定位都是:position:static,这意味着元素 ...
- 在linux下挂载、卸载U盘
首先你得保证你的U盘的格式是fat格式. 先进入/mnt/目录新建一个usb目录 cd /mnt/ mkidr usb 先fdisk -l,然后插上U盘,fdisk -l 查看是否有新的硬盘添加上来了 ...
- 如何使用 App Studio 快速定制你自己的 Universal Windows App
之前我为大家介绍过 App Studio 这只神器可以帮助大家快速制作一个 Windows Phone 8 的应用,今天之所以在写一篇关于 App Studio 的文章是因为,App Studio 经 ...
- The file 'MemoryStream' is corrupted! 的解决办法
The file 'MemoryStream' is corrupted! Remove it and launch unity again! [Position > ] 有时候我们会遇到这个报 ...
- 250W电源带i7+GTX1080?
电源的科学: Q1:电源的额定功率是什么?峰值功率又是什么?A1:电源的额定功率就是电源正常工作时的功率,它的值为用电器的额定电压乘以额定电流.而峰值功率指的是电源短时间内能达到的最大功率, 一般情况 ...
- .NET 相关工具
加密工具,反DUMP,反调试,反编译,加密代码资源内容,混淆流程,变量.Confuser is a protector/obfuscator for .NET, providing great sec ...
- Query Object--查询对象模式(下)
回顾 上一篇对模式进行了介绍,并基于ADO.NET进行了实现,虽然现在ORM框架越来越流行,但是很多中小型的公司仍然是使用ADO.NET来进行数据库操作的,随着项目的需求不断增加,业务不断变化,ADO ...
- Android代码截屏
本文来源:http://myhpu2008.iteye.com/blog/999779 这种方法应该只能对当前Activity本身进行截屏,因而你只能在你应用程序中参照该代码对其应用程序本身截屏. i ...
- C#基础总结之一变量常量-if嵌套语句-witch结构-类型转换
//Console.WriteLine("Hello World"); //打印显示 //Console.ReadLine(); //接收输入的值 //Console.ReadKe ...
- Linux下查看tcp连接数及状态
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ TIME_WAIT 8947FIN_WAIT1 15FIN_W ...