MQTT初始篇笔记整理
MQTT简介
- MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),基于TCP/IP 协议栈而构建,虽然叫消息队列遥测传输,但是她与消息队列毫无关系,她是一个IBM开发的客户端服务端架构的 发布/订阅模式 的消息传输协议;她的设计思想是轻巧、开放、简单、规范、易于实现,因此MQTT比较适合在物联网环境(IoT,Internet of Things)以及机器与机器的通信(M2M,Machine to Machine)等受限的环境下。
MQTT的优势
- MQTT是一种轻量级、灵活的网络协议,轻量级保证其可在严重受限的设备硬件和高延迟/带宽有限的网络上实现;她的灵活性使得IoT设备和服务的多样化应用场景提供支持成为可能
- 1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
- 2、对负载内容屏蔽的消息传输;
- 3、使用 TCP/IP 提供网络连接;
- 4、有三种消息发布服务质量:
- “至多一次” 服务质量级别0 QoS0,消息将最多传递一次,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。她是最快的传输方式,有时成为"触发并忘记"。消息最多传递一次
- “至少一次” 服务质量级别1 QoS1,消息会始终至少传递一次,确保消息到达,但消息重复可能会发生。
- “只有一次” 服务质量级别2 QoS2,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。她是最安全也是最慢的传输方式。
- 5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
- 6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;
MQTT与其他网络协议的对比
- 与HTTP协议对比
- 1. HTTP 是一种同步协议。客户端需要等待服务器响应。Web 浏览器具有这样的要求,但它的代价是牺牲了可伸缩性。在 IoT 领域,大量设备以及很可能不可靠或高延迟的网络使得同步通信成为问题。异步消息协议更适合 IoT 应用程序。传感器发送读数,让网络确定将其传送到目标设备和服务的最佳路线和时间。
- 2. HTTP 是单向的。客户端必须发起连接。在 IoT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。
- 3. HTTP 是一种 1-1 协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 IoT 应用程序中的一种常见使用情况。
- 4. HTTP 是一种有许多标头和规则的重量级协议。它不适合受限的网络。
- 与AMQP对比
- 企业中间件系统中使用的最流行的消息协议被称为 AMQP(高级消息排队协议)。但是,在高性能环境中,计算能力和网络延迟通常不是问题。AMQP 致力于在企业应用程序中实现可靠性和互操作性。它拥有庞大的特性集,但不适合资源受限的 IoT 应用程序。
- 与XMPP对比
- XMPP(Extensible Messaging and Presence Protocol,可扩展消息和状态协议)是一种对等即时消息 (IM) 协议。它高度依赖于支持 IM 用例的特性,比如存在状态和介质连接。与 MQTT 相比,它在设备和网络上需要的资源都要多得多。
发布订阅模型
- MQTT 协议在网络中定义了两种实体类型:一个消息代理和一些客户端。代理是一个服务器,它从客户端接收所有消息,然后将这些消息路由到相关的目标客户端。客户端是能够与代理交互来发送和接收消息的任何事物。客户端可以是现场的 IoT 传感器,或者是数据中心内处理 IoT 数据的应用程序。
- 1.客户端连接到代理。它可以订阅代理中的任何消息 “主题”。此连接可以是简单的 TCP/IP 连接,也可以是用于发送敏感消息的加密 TLS 连接。
- 2.客户端通过将消息和主题发送给代理,发布某个主题范围内的消息。
- 3.代理然后将消息转发给所有订阅该主题的客户端。
- 因为 MQTT 消息是按主题进行组织的,所以应用程序开发人员能灵活地指定某些客户端只能与某些消息交互。就是订阅相应的主题后才会收到相应的主题下的消息。
MQTT 控制报文格式
- 2.1 MQTT控制报文的结构 Structure of an MQTT Control Packet
2.2 固定报头 Fixed header
2.2.1 MQTT控制报文的类型 MQTT Control Packet type
2.2.2 标志 Flags
控制报文字类型是从值区分为0-15依次对应 Reserved Connect ConnAck Publish PubRec PubComp Subscribe SubAck Unsubscribe PingReq PingResp DisConnect Reserved 相应的Flags 有对应的数据
学习网址
- MQTT百科
- MQTT使用示例代码及第三方相关内容
- MQTT工具地址
- 物联网MQTT文档
- 物联网MQTT社区Wiki
- Mosquito 文档
- MQTT Essentials
- MQTT协议中文版
- MQTT入门篇
- kafka和mqtt的区别是什么?
如有不当之处 敬请指出 如需转载请注明出处 谢谢
MQTT初始篇笔记整理的更多相关文章
- 一篇笔记整理JVM工作原理
首先要了解的 >>数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了 ...
- 从0开始学Swift笔记整理(五)
这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...
- Deep Learning(深度学习)学习笔记整理系列之(七)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(三)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Mysql学习笔记整理手册
目录 (1) str_to_date (2) 递归查询 (3) 排序问题 (4) 条件函数 (5) 列转行函数 (6) find_int_set (7) 类型转换函数 (8) 合并更新 继上一篇博客& ...
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- java 笔记整理
在19寒假对java基础进行自学,总结的笔记整理出来 ==================================================== 排序查找 冒泡排序法1.一共会比较数组元 ...
- flex布局笔记整理
flex布局笔记整理 了解-webkit-box 利用postcss进行css代码的向后兼容时,display:flex兼容后的代码常会带有display:-webkit-box. 部分移动端内核较低 ...
- 运维开发笔记整理-template的使用
运维开发笔记整理-Django的template的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在上一篇博客中我们学习了HttpResponse 和JsonResponse方 ...
随机推荐
- 【Linux】快速清空当前文件
$ : > filename $ > filename $ echo "" > filename $ echo > filename $ cat /dev/ ...
- 4、加载:Loading
/* ---html----*/ <ion-content> <button (click)="manual()">手动关闭</button> ...
- 融云会话界面导航上移-使用IQKeyboardManager
关于IQKeyBoardManager挤出导航栏的解决方案 方法一: 写在前面 虽然修改后能解决导航栏被挤出去的问题,但是就目前来看是有副作用的,写这篇文章就是想大家来一起讨论,毕竟键盘处理还是比较头 ...
- 使用Spring的AOP实现切面日志
AOP切面日志的使用方式 @Aspect @Component public class HttpAspect { private static final Logger logger = Logge ...
- 【转载】Navicat Premium 12安装与激活
原文地址 https://www.jianshu.com/p/5f693b4c9468#comment-20147185感谢作者的无私奉献,无意侵权,如需删除请联系我!所提供的激活文件理论支持Navi ...
- Js浮动广告效果实现
第一种 漂浮广告 不符合W3CJavaScript漂浮广告代码,很不错,代码精简,不过一次只有漂一个,复制就能用了.希望站长朋友喜欢. <html> <head> <ti ...
- 单链表的插入伪算法和用C语言创建单链表,并遍历
非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p-> ...
- 01_Quartz基础结构
[各种任务调度的使用场景] 论坛每天凌晨统计论坛用户的积分排名. 论坛每半个小时生成精华文章. 每隔30分钟对锁定过期的用户解锁. 每月1号统计上个月各部门的业务数据. [Quartz 简介] Qua ...
- Linux 一直提示 login incorrect
- XUtils3 的 环境搭建与简单使用
XUtils3 的 环境搭建 环境搭建三部曲 ----------------------- 说明 : author 修雨轩陈 使用andorid Studio 已经创建了一个项目 并且自己需要使用 ...