前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >物联网平台的标配—MQTT

物联网平台的标配—MQTT

作者头像
CSDN技术头条
发布2019-11-19 16:13:11
3K0
发布2019-11-19 16:13:11
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条
本文选自 | 《MQTT 协议快速入门》

作者 | 付强

责编 | odd

最近的 BAT 动向,都把 MQTT 作为物联网前置接入套件单列出来作为标准云服务提供。阿里云物联网套件,百度开放云物联网服务 IOT,腾讯 QQ 物联平台,中移动 OneNet 开放云,Amazon IOT 服务......今天,来聊聊 MQTT 协议的基本概念和术语,核心内容包括:

  • MQTT 协议的通信模型
  • MQTT Client
  • MQTT Broker
  • MQTT 协议数据包

01

MQTT 协议的通信模型

就像我们在之前提到的,MQTT 的通信是通过发布/订阅的方式来实现的,消息的发布方和订阅方通过这种方式来进行解耦,它们没有直接地连接,它们需要一个中间方。在 MQTT 里面我们称之为 Broker,用来进行消息的存储和转发。一次典型的 MQTT 消息通信流程如下所示:

  1. 发布方将消息发送到 Broker;
  2. Broker 接收到消息以后,检查下都有哪些订阅方订阅了此类消息,然后将消息发送到这些订阅方;
  3. 订阅方从 Broker 获取该消息。

02

MQTT Client

任何终端,嵌入式设备也好,服务器也好,只要运行了 MQTT 的库或者代码,我们都称为 MQTT 的 Client。Publisher 和 Subscriber 都属于 Client,Pushlisher 或者 Subscriber 只取决于该 Client 当前的状态——是在发布还是在订阅消息。当然,一个 Client 可以同时是 Publisher 和 Subscriber。

MQTT Client 库在很多语言中都有实现,包括 Android、Arduino、Ruby、C、C++、C#、Go、iOS、Java、JavaScript,以及 .NET 等。如果你要查看相应语言的库实现,可以在这里找到。

本文中,我们主要使用 Node.js 的 MQTT Client 库来进行演示,所以需要先安装 Node.js,然后安装 MQTT Client 的 Node.js 包。

03

MQTT Broker

如前面所讲的,Broker 负责接收 Publisher 的消息,并发送给相应的 Subscriber,它是整个 MQTT 订阅/发布的核心。在实际应用中,一个 MQTT Broker 还应该提供以下一些功能:

  • 可以横向扩展,比如集群,来满足大量的 Client 接入;
  • 可以扩展接入业务系统;
  • 易于监控,满足高可用性。

我们在之前文章面提到的阿里云、腾讯云、青云之类的云服务商提供的 MQTT 服务,其实就可以理解为他们提供了满足上述要求的 MQTT Broker。

在本文中,我们使用一个公共的 MQTT Broker —— iot.eclipse.org 做演示,同时也会学习如何搭建一个 MQTT Broker。

04

MQTT 协议数据包

MQTT 协议的数据包格式非常简单,一个 MQTT 协议数据包由下面三个部分组成:

  • 固定头(Fixed header):存在于所有的 MQTT 数据包中,用于表示数据包类型及对应标识,表明数据包大小;
  • 可变头(Variable header):存在于部分类型的 MQTT 数据包中,具体内容由相应类型的数据包决定;
  • 消息体(Payload):存在于部分 MQTT 数据包中,存储消息的具体数据。

接下来看一下固定头的格式,可变头和消息体我们将在讲解各种具体类型的 MQTT 协议数据包的时候 case by case 地讨论。

固定头格式:

固定头的第一个字节的高 4 位 bit 用于指定该数据包的类型,MQTT 的数据包有以下一些类型:

固定头的低 4 位 bit 用于指定数据包的 Flag,不同的数据包类型,其 Flag 的定义是不一样的,每种数据包对应的 Flag 如下:

从固定头的第 2 字节开始是用于标识 MQTT 数据包长度的字段,最少一个字节,最大四个字节,每一个字节的低 7 位用于标识值,范围为 0~127。

最高位的 1 位是标识位,用来说明是否有后续字节来标识长度。例如:标识为 0,代表为没有后续字节;标识为 1,代表后续还有一个字节用于标识包长度。MQTT 协议规定最多可以用四个字节来标识包长度。

所以这四个字节最多可以标识的包长度为:(0xFF, 0xFF, 0xFF, 0x7F) = 268435455 字节,约 256M,这个是 MQTT 协议中数据包的最大长度。(注意:Remain Length 的值不包含固定头的大小,包括第 1 字节和 Remain Length 字段。)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GitChat精品课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01
  • MQTT 协议的通信模型
  • 02
  • MQTT Client
  • 03
  • MQTT Broker
  • 04
  • MQTT 协议数据包
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档