MQTT,你绝对要学习的物联网通信协议

随着物联网的火热,从google,亚马逊,微软到国内的百度,腾讯,阿里等巨头都发布物联网平台以及开发套件,支持MQTT(Message Queuing TelemetryTransport)协议那么做嵌入式开发的你还有理由不学习MQTT协议吗?今天我们就来简单介绍下MQTT协议.

MQTT最早是由巨头IBM提出来的,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议是一个客户端服务端架构的发布订阅式的消息传输协议,他的设计思想是轻巧,开放,简单,规范,因此易于实现,受到了越来越多巨头的青睐,其主要的特点有:

使用发布订阅消息模式,提供了一对多的消息发布

消息传输不需要知道负载的内容

使用TCP/IP提供基本的网络连通

消息传输提供三种等级:

“最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失,例如,这个等级可以用于传感器测量数据,单次的数据丢失没有关系,因为不久之后会再次发送,

“至少一次”保证消息可以到达,但是可能会重复。

“仅一次”,保证消息只到达一次,例如,这个等级可以用于一些计费系统,如果消息丢失或重复会导致不正确的收费,损失惨重。

很小的传输消耗,和协议数据交换,最大限度减少网络流量

异常连接断开时候,能通知到相关各方

MQTT控制报文结构

MQTT协议通过交换预定义的MQTT控制报文来通信,控制报文由三部分组成

固定报头:每个控制报文都包含一个固定报头,固定报头格式如下所示

控制报文类型由四个bit位来表示,可以表示16种类型

固定报头第一个字节的剩余四个bit用来表示每个控制报文类型特定的标志,任何标记为保留的标志位都是保留给以后使用的,如果收到非法的标志,接受者必须关闭网络连接。

剩余长度:

表示当前报文剩余部分的字节数,包括可变报头和负载的数据,剩余长度不包括用于编码剩余长度字段本身的字节数。剩余长度字段使用一个可变长度编码方案,对小于128的值使用单字节编码。更多详细内容大家可参阅MQTT官方文档,尽量阅读英文原版的协议。

本文分享自微信公众号 - 嵌入式程序猿(InterruptISR)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DevOps时代的专栏

特性分支与特性开关哪家强?

分支管理策略对一个研发团队发布高质量的软件至关重要。在本文中,我们将探讨同一代码库中多任务并行开发时的解决方案,以及它们之间的优缺点。一般意义上来说冲突合并成本...

86700
来自专栏zhisheng

告诉你们一个好消息

《通过项目逐步深入了解Mybatis》系列文章已在简书、掘金、segmentFault、CSDN受到一大波的好评。 今天晚上特意整理下来成一篇文章,本来是想发布...

385100
来自专栏高性能服务器开发

1 游戏服务器开发的基本体系与服务器端开发的一些建议

近年来,我身边的朋友有很多都从web转向了游戏开发。他们以前都没有做过游戏服务器开发,更谈不上什么经验,而从网上找的例子或游戏方面的知识,又是那么的少,那么的零...

93130
来自专栏JAVA高级架构

JAVA架构师面试题,如何成为架构师

经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。 基础题目 Java线程的...

1.1K110
来自专栏web前端教室

《vue+vant+node+mongoDB+koa2》电商项目实战连载(1)

每节课程规划是大概12-15分钟左右,是以功能点来划分课程的节奏。预计总课时数大概40节左右吧,看实际情况吧。

20220
来自专栏Cloud Native - 产品级敏捷

微服务架构设计 第六步: 微服务的 User Stories 的分析、设计与定义完成

2016.9.12, 深圳, Ken Fang 特性负责人, 说服开发与测试人员, 能认同微服务中的 User Story 的价值, 并使开发与测试人员能从产品...

23880
来自专栏程序你好

数据库设计的最佳实践

17020
来自专栏FreeBuf

如何阻止下一次心脏出血漏洞

原文:How to Prevent the next Heartbleed.docx 翻译:赵阳 一、引言 基于OpenSSL的心脏出血漏洞被认为是CVE-20...

385100
来自专栏大前端开发

从编程小白到全栈开发:数据 (1)

有些事情时刻都在发生,但是我们通常很少意识到它们的存在。比如,当我们使用网页或移动应用的时候,其实在不断的产生着数据:注册一个网站或app的账号、发一条微博、写...

11230
来自专栏王亚昌的专栏

UNIX编程艺术之“模块性”

     本章主要讨论模块划分、接口设计,提出了几个很重要的概念,包括紧凑性、正交性、自顶向下和自底向上的设计、SPOT原则、分层、插件化。下面就这几个概念,谈...

12320

扫码关注云+社区

领取腾讯云代金券