前言
以前看英文文章或资料,看完之后,摘要或者忘记。这一次选择感兴趣的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客户端可以用着急升级,但升级之后可以从新增特性中收益良多。
转载自: http://www.tuicool.com/articles/qmiUbmF
相关推荐
4. **Shared Subscriptions**:MQTT3.1.1引入了共享订阅,允许多个订阅者以分发模式共享同一订阅,确保消息只被消费一次。 5. **Will Topic和Will Message的可选性**:在3.1.1版本中,客户端可以不设置遗嘱消息,...
netty-mqtt是一个基于Java开发的MQTT 3.1.1协议服务端与客户端,包含113个文件,其中包括87个Java源文件、8个XML文件、7个Iml文件、3个YAML文件、3个JKS文件、2个Factories文件、1个LICENSE文件和1个Markdown文件。...
然后,我们转向`mqtt5.0`版本,这是一个更新的规范,提供了更多特性,如服务质量(QoS)的增强、用户属性、会话有效性等。集成mqtt5.0,可以使用EMQX的Java客户端库`emqx-mqtt-java`: ```kotlin dependencies { ...
MQTT中文文档,帮助理解MQTT具体协议,用于创建服务器或者客户端
总之,MQTT 3.1.1是一个强大的工具,适用于物联网和M2M通信,通过其精简的设计和灵活的服务质量保证,确保了数据的可靠传输和高效利用网络资源。随着物联网技术的快速发展,MQTT的重要性只会继续增长。
MQTT 协议 3.1.1 中文版 MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是...
MQTT协议V3.1.1最新中文翻译版,MQTT协议中文手册
下载个资料真不容易,文件为mqtt3.1.1的中文版,看到二三十的要币,不忍直视,这里给大家分享一下,意思一下得了。
这个压缩包包含的是MQTT协议3.1.1版本的中文版文档以及可能的Windows客户端软件,对于理解和应用MQTT协议非常有帮助。 MQTT协议3.1.1中文版文档(MQTT-3.1.1-CN.pdf)会详细解释该协议的各种规范和特性。以下是该...
MQTT消息包含报头和一个可选的负载。报头包括固定报头和可变报头,其中固定报头包含了消息类型、QoS级别等基本信息,可变报头可能包含主题名、消息ID等详细信息。 **连接与会话管理** - **CONNECT**:客户端发起...
总之,MQTT V3.1.1 C Server和客户端源码为开发者提供了一个深入了解MQTT协议和实践C编程的宝贵资源。通过深入研究和利用这些源码,开发者可以更好地掌握物联网通信的核心技术,并将其应用于实际项目中。
MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及...
RyanMqtt实现了MQTT3.1.1协议的客户端 此库针对资源受限的嵌入式设备进行了优化
mqtt协议3.1.1中文版。MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。...
这是一个基于Java技术栈,具体是Netty、MQTT 3.1.1协议、Spring Boot框架和JDK 8实现的MQTT服务器和客户端的项目。这个项目对于学习和实践物联网(IoT)通信以及Java后端开发具有很高的价值,尤其适合作为毕业设计的...
在学习MQTT协议时,还应当关注其版本差异和规范的更新,因为协议的每个新版本都可能带来新的特性或对已有功能的改进。例如,文档中提到的MQTT-3.1.1版本,这个版本主要的改动包括增强了协议规范和改进了协议的互操作...
例如,v3.1.1协议可能已经包含了对某些新特性的预留,使得客户端和服务器在升级到更高版本时能平滑过渡。 总的来说,MQTT v3.1.1是物联网通信领域的一个关键协议,它的轻量级设计和可靠的QoS机制使其成为资源有限的...
#### 已实现: * 发布订阅功能 * 遗言通知 * 会话session数据 * 发布保留消息 * 主题过滤(/test 会接受到 /test/yy 的主题消息) * 实现标准的 qos0 qos1 qos2消息确认机制 * ssl加密 * 支持ws协议 ...
(20241028日更新)使用采用QT开发的MQTT客户端,协议使用MQTT3.1.1版本。 如果你没有硬件,想要学习物联网,学习如何与服务器进行通信,这个软件是必备的。 已经测试可以登录OneNet、阿里云、腾讯物联网平台。 完成...
下面将详细介绍MQTT 3.1.1版本协议的核心概念和关键特性。 1. **协议概述**: MQTT设计的目标是降低网络负载,简化通信机制,特别适合资源有限的设备。它采用发布/订阅模型,其中客户端可以作为发布者发布消息,也...