博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MQTT
阅读量:6293 次
发布时间:2019-06-22

本文共 2515 字,大约阅读时间需要 8 分钟。

mqtt 协议版本: 3.1.1

MQTT 介绍

互联网的基础网络协议是 TCP/IP协议.

MQTT(消息队列遥测传输)是基于 TCP/IP 协议栈而构建的, 已成为 IoT 通信的标准.

为什么选择 MQTT

MQTT 有多好多好, 多么牛逼我就不说了. 说的再多不如一个一个试, 试完了做比对, 剩下的那个就是要选择的.

实在不想这样搞, 技术就跟着一线走.

发布和订阅模型

MQTT 协议在网络中定义了两种实体类型: 一个消息代理和一些客户端.

代理是一个服务器, 它从客户端接收所有消息, 然后将这些消息路由到相关的目标客户端. 客户端就是能够与代理交互来发送和接收消息的.

客户端连接到代理. 它可以订阅代理中的任何消息 “主题”. 此连接可以是简单的 TCP/IP 连接, 也可以是用于发送敏感消息的加密 TLS 连接.

客户端通过将消息和主题发送给代理, 代理然后将消息转发给所有订阅该主题的客户端.

因为 MQTT 消息是按主题进行组织的, 所以应用程序开发人员能灵活地指定某些客户端只能与某些消息交互.

上图我们有两个主题分别是 config_change device_data.

设备将在 device_data 主题上发布设备数据, 经过 Broker 发送给所有订阅者接收(这里的订阅者是数据处理和存储).

而我们的设备控制器将命令发布到 config_change 主题, 经过 Broker 发送给所有订阅者接收(这里的订阅者是设备).

⚠️ Broker = 代理 = MQTT 服务器

MQTT Broker 选择

下面介绍几款MQTT服务器:

  • Apache-Apollo: 一个代理服务器, 在 ActiveMQ 基础上发展而来, 可以支持 STOMP、AMQP、MQTT、Openwire、SSL和WebSockets 等多种协议, 并且 Apollo 提供后台管理页面, 方便开发者管理和调试.
  • EMQ: 号称百万级开源MQTT消息服务器, 基于 Erlang/OTP 语言平台开发, 支持大规模连接和分布式集群, 发布订阅模式的开源MQTT消息服务器.
  • HiveMQ: 一个企业级的MQTT代理,主要用于企业和新兴的机器到机器M2M通讯和内部传输, 最大程度的满足可伸缩性、易管理和安全特性, 提供免费的个人版. HiveMQ提供了开源的插件开发包.
  • Mosquitto: 一款实现了消息推送协议MQTT v3.1的开源消息代理软件, 提供轻量级的、支持可发布/订阅的消息推送模式.

了解 MQTT 协议

更详细的协议介绍在

MQTT 是一种连接协议, 它指定了如何组织数据字节并通过 TCP/IP 网络传输它们. 但实际上, 开发人员并不需要了解这个连接协议.

所有 MQTT 库和工具都提供了直接处理这些消息的简单方法, 并能自动填充一些必需的字段, 比如消息和客户端 ID.

首先, 客户端发送一条 CONNECT 消息来连接代理. CONNECT 消息要求建立从客户端到代理的连接. CONNECT 消息包含以下内容参数.

表 1. CONNECT 消息参数

参数 说明
cleanSession 此标志指定连接是否是持久性的. 持久会话会将所有订阅和可能丢失的消息 (具体取决于 QoS) 都存储在代理中 (请参阅 表 3 获取 QoS 的描述)
username 代理的身份验证和授权凭证
password 代理的身份验证和授权凭证
lastWillTopic 连接意外中断时,代理会自动向某个主题发送一条 “last will” 消息.
lastWillQos “last will” 消息的 QoS. (请参阅 表 3 来查看 QoS 的描述)
lastWillMessage “last will” 消息本身
keepAlive 这是客户端通过 ping 代理来保持连接有效所需的时间间隔

客户端收到来自代理的一条 CONNACK 消息. CONNACK 消息包含以下内容参数.

表 2. CONNACK 消息参数

参数 说明
sessionPresent 此参数表明连接是否已有一个持久会话. 也就是说, 连接已订阅了主题, 而且会接收丢失的消息.
returnCode 0 表示成功. 其他值指出了失败的原因.

建立连接后, 客户端向代理发送一条或多条 SUBSCRIBE 消息, 表明它会从代理接收针对某些主题的消息. 如表 3.

表 3. SUBSCRIBE 消息参数

参数 说明
qos 表明此主题范围内的消息传送到客户端所需的一致程度. 值 0:不可靠, 消息基本上仅传送一次, 如果当时客户端不可用, 则会丢失该消息. 值 1:消息应传送至少 1 次. 值 2:消息仅传送一次.
topic 要订阅的主题. 一个主题可以有多个级别, 级别之间用斜杠字符分隔. 例如, “dw/demo” 和 “ibm/bluemix/mqtt” 是有效的主题.

客户端成功订阅某个主题后, 代理会返回一条 SUBACK 消息, 其中包含一个或多个 returnCode 参数.

表 4. SUBACK 消息参数

参数 说明
returnCode SUBCRIBE 命令中的每个主题都有一个返回代码. 值 0 - 2:成功达到相应的 QoS 级别. 值 128:失败.

与 SUBSCRIBE 消息对应, 客户端也可以通过 UNSUBSCRIBE 消息取消订阅一个或多个主题.

表 5. UNSUBSCRIBE 消息参数

参数 说明
topic 此参数可重复用于多个主题.

客户端可向代理发送 PUBLISH 消息. 该消息包含一个主题和数据. 代理将消息转发给所有订阅该主题的客户端.

表 6. PUBLISH 消息参数

参数 说明
topicName 发布消息的相关主题.
qos 消息传递的服务质量水平.
retainFlag 此标志表明代理是否保留该消息作为针对此主题的最后一条已知消息.
payload 消息中的实际数据. 它可以是文本字符串或二进制大对象数据.

转载地址:http://wocta.baihongyu.com/

你可能感兴趣的文章
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>