MQTT知识大全【科普贴】

简介: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于客户端与服务器之间发布/订阅(publish/subscribe)模式的"轻量级"通讯协议。为了保证通讯的安全性和可靠性,该协议基于TCP/IP协议构建。由IBM在1999年发布,最初被用于石油管道传感器与卫星的通讯连接,2014年,它正式成为一个OASIS开放标准并得到了大量开源语言的支持。

目录

一、协议简介

二、工作原理

三、优势特点


一、协议简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于客户端与服务器之间发布/订阅(publish/subscribe)模式的"轻量级"通讯协议。为了保证通讯的安全性和可靠性,该协议基于TCP/IP协议构建。由IBM在1999年发布,最初被用于石油管道传感器与卫星的通讯连接,2014年,它正式成为一个OASIS开放标准并得到了大量开源语言的支持。


MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用,比如红绿灯的远程控制、会议设备的后台管理等。

二、工作原理

MQTT工作模式是基于客户端和服务端通讯模式运作的,在整个通讯过程中,有三种身份:发布者(Publisher)、代理服务器(Broker)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,它们之间的消息是通过代理服务器转发的,消息发布者可以同时是订阅者。

网络异常,图片无法展示
|

MQTT的消息体分为:主题(topic)和负载(payload)两部分,其中,

topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)。

payload,可以理解为消息的具体内容,是指订阅者希望收到的信息内容。payload消息体位MQTT数据包的第三部分,包含四种类型的消息:

1)CONNECT,消息体内容主要是:客户端的ClientID、订阅的Topic、Message以及用户名和密码。

2)SUBSCRIBE,消息体内容是一系列的要订阅的主题以及QoS。

3)SUBACK,消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。

4)UNSUBSCRIBE,消息体内容是要订阅的主题。

三、优势特点

MQTT协议工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,有如下优势特点:

1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

2)对负载内容屏蔽的消息传输。

3)使用TCP/IP提供网络连接。

主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。就像WebRTC中的TLS协议和DTLS协议一样,分别支持TCP和UDP传输。

4)三种消息发布服务质量:

至多一次,消息发布完全依赖底层TCP/IP网络,可能会发生消息丢失情况。

至少一次,确保消息到达,但消息可能会重复发送或者收到。

只有一次,确保消息到达一次。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。

这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,因此MQTT是首选协议。

6)使用Last Will和Testament特性通知有关各方客户端异常中断的机制,这是http协议所不具备的。



作者简介:大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,同时也是CSDN博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,公众号:玩转音视频,欢迎关注我分享更多干货!

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
安全 网络协议 物联网
不看后悔系列之一篇搞懂LinuxCentOS搭建MQTT服务器及客户端操作使用
linux CentOS上搭建MQTT服务器并不难,主要就是用到了mosquitto这款消息代理服务软件。其采用发布/订阅模式传输机制,轻量、简单、开放并易于实现,被广泛应用于物联网之中。
1958 0
|
2天前
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
26 5
|
2月前
|
机器学习/深度学习 前端开发 JavaScript
230+本图灵编程高清文字版无水印电子书合集【制作不易,点赞收藏❤️】
今日精选,200余本图灵出版的高质量编程电子书,覆盖编程、系统架构、算法及机器学习等热门领域,助你全面提升技术能力。无论你是初学者还是资深开发者,都能从中找到适合自己的学习资源,从《Python编程:从入门到实践》到《深度学习入门》,每一本书都将是你技术成长道路上的良师益友,帮助你在瞬息万变的技术浪潮中站稳脚跟,稳步前行。
72 2
|
7月前
|
监控 安全 物联网
物联网平台有什么好玩的地方
物联网平台有什么好玩的地方
152 0
|
7月前
|
数据安全/隐私保护
mqtt学习记录
mqtt学习记录
51 0
|
小程序 数据库
云开发(微信-小程序)笔记(十五)---- 收藏,点赞(下)
云开发(微信-小程序)笔记(十五)---- 收藏,点赞(下)
127 0
|
小程序 Java 机器人
使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了
此程序在手再也不怕女朋友跟你闹了!!!!自从有了女朋友比如:早安、晚安之类的问候语可不能断,但是也难免有时候会忘记那么该咋么办呢?很简单写一个程序么,近日闲来无趣想着用Java写一个自动发送微信的小程序,实现定时给指定的好友发送指定的消息,这不就很Nice了?本文主要包括实现的思路、代码的实现、打包为jar快捷方式!
160 0
|
存储 小程序 数据库
手把手教你撸一个小程序带太阳码的海报分享
我们都知道,微信小程序目前还不支持转发朋友圈,可能现在Android是支持了,iOS还不支持,但总的来说还不能支持普遍机型。这样假如我们需要推荐某个心仪的商品到朋友圈就没法分享出去,于是就可以使用生成海报的形式,让商品详情页的信息显示在一张图片上,保存到手机相册,然后发朋友圈,朋友可以长按识别海报上的小程序码直达该商品详情页面,从而达到如同直接分享商品详情页的效果。
738 0
手把手教你撸一个小程序带太阳码的海报分享
|
Android开发 开发者
科普技术贴:个人开发者的那些赚钱方式
公众号:smart_android 作者:耿广龙|loonggg   移动互联网的火爆,衍生出了许多新兴的职业,比如:个人开发者,自媒体等等。还出现了许多所谓的互联网思维,反正就是带来了许多让人无法理解或者可以轻松赚钱的渠道。因为我是一名程序员,我今天就来谈谈个人开发者是如何来赚钱的。     其实最直接的方式无非就有两种,一种是接私活,一种是加广告。    
2436 0
|
Web App开发 JavaScript 前端开发
😺我开发了一个Chrome插件,可以在掘金官网里撸猫!还可以实时和铲屎官们聊天
掘金又弄这种整活儿的活动了~~我就喜欢整活儿! 话不多说,先看效果~
389 0
😺我开发了一个Chrome插件,可以在掘金官网里撸猫!还可以实时和铲屎官们聊天