1-MQTT基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1-MQTT基础知识相关的知识,希望对你有一定的参考价值。
参考技术A 由于物联网的环境是非常特别的,所以MQTT遵循以下设计原则:MQTT 协议的中心是 MQTT 服务器或代理 (broker) ,支持发布程序和订阅程序进行访问,如下图所示
MQTT拥有14种不同的消息类型:
MQTT是通过主题对消息进行分类的,本质上就是一个UTF-8的字符串,不过可以通过反斜杠表示多个层级关系。主题并不需要创建,直接使用就是了。
主题还可以通过通配符进行过滤。其中,+可以过滤一个层级,而#只能出现在主题最后表示过滤任意级别的层级。
举个例子:
building-b/floor-5:代表B楼5层的设备。
+/floor-5:代表任何一个楼的5层的设备。
building-b/#:代表B楼所有的设备。
注意,MQTT允许使用通配符订阅主题,但是并不允许使用通配符广播。
WILL主题也叫遗嘱消息,是一个特殊的主题。
客户端连接Broker的时候,附带一个will主题和will主题对应的内容。
当客户端与Broker断开连接时,Broker将该WILL主题的内容发送给相关的订阅者的遗嘱消息,这样订阅者就知道该客户端已经离线了。
以下情况下会发送 Will Message:
注:在客户端正常调用 disconnect 方法之后并不会被发送。
为了满足不同的场景,MQTT支持三种不同级别的服务质量(Quality of Service,QoS)为不同场景提供消息可靠性:
级别2所提供的不重不丢很多情况下是最理想的,不过往返多次的确认一定对并发和延迟带来影响。
级别1提供的至少一次语义在日志处理这种场景下是完全OK的,所以像Kafka这类的系统利用这一特点减少确认从而大大提高了并发。
级别0适合鸡肋数据场景,基本就没怎么用了。
客户端在连接的时候可以设置clean session,如果设置成true说明在设备离线后broker不保存,设置成false说明在设备离线后broker保存消息,等上线的时候就发送给他。
客户端在连接Broker的时候,会指定心跳的时候。连接成功之后,客户端就按照这个心跳时间定时发送心跳数据给Broker,如果Broker在1.5T时间内没有收到客户端的心跳数据,则判定改设备已经离线,发送WILL主题广播告诉别人该设备已离线。
MQTT可以使用SSL加密方式传输,设备的认证有单向认证和双向认证两种:
MQTT除了有SSL加密之外,对于连接也有账号密码的授权,只要账号密码正确的才可以连接成功。
MQTT 协议和mosquitto: https://shaocheng.li/posts/2015/08/11/
物联网网关协议比较MQTT 和 Modbus:
https://software.intel.com/pt-br/node/628992?language=es
MQTT基础概念介绍
https://blog.csdn.net/pipinet123/article/details/60866901
源博客地址:http://blog.csdn.net/pipinet123
MQTT交流群:221405150
在MQTT群里有很多群友经常会把MQTT、MQTT Broker、MQTT Client这些概念搞混淆。
也有很多群友不知道MQTT相关产品去哪里找
还有群友将MQTT和某db、某MQ、TCP协议进行对比
鉴于部分初识MQTT朋友的疑惑,所以讲这些概念以及相关推荐写此博文,希望对初识MQTT的朋友有所帮助。
MQTT协议
定义
1、MQTT协议承载在TCP/IP上
2、MQTT是协议!!!
网上细节的定义描述此处不赘述。
版本
MQTT 3.1
MQTT 3.1.1
MQTT-SN它和MQTT不是一回事,具体的区别网上一堆,我就不重复了,给大家一个地址,这里有最详细的地址
http://mqtt.org/new/wp-content/uploads/2009/06/MQTT-SN_spec_v1.2.pdf
推荐字典
建议对协议细节不懂的时候去查阅,没必要一次性读完,之后让它睡大觉
中文:http://blog.mcxiaoke.com/mqtt/protocol/MQTT-3.1.1-CN.html
英文:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
MQTT Broker
定义
基于MQTT协议的服务端实现
推荐Broker
Mosquitto(C/C++)
emqttd(Erlang/OTP)
Moquette(java朋友可以用它来学习,用它来做项目还是算了,因为它的处理都太粗糙、太不成熟)
HiveMQ(Java)
这里有最全的Broker罗列 https://github.com/mqtt/mqtt.github.io/wiki/servers
MQTT Client
定义
基于MQTT协议的客户端实现
推荐Client
这里有最全的Client罗列https://github.com/mqtt/mqtt.github.io/wiki/libraries
---------------------
作者:西安-PP
来源:CSDN
原文:https://blog.csdn.net/pipinet123/article/details/60866901
版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于1-MQTT基础知识的主要内容,如果未能解决你的问题,请参考以下文章