MQTT与HTTP的区别
  • HTTP协议是客户端与服务端直连请求与响应
  • MQTT是基于发布订阅模型的轻量级的消息传输协议
MQTT能力
  • 发布:Publish
  • 订阅:Subscribe
  • 代理:Broker,管理通信
  • 执行模式:客户端发送消息到broker,broker将消息发送给订阅过的客户端
MQTT通信模式
  • 一对一:点对点通信
  • 一对多:消息广播
  • 多对一:数据采集
  • MQTT 底层协议基于TCP实现
服务质量等级
  • QoS 0:消息可能丢失 (最多一次传输)
  • QoS 1:消息不会丢失但可能重复 (至少一次传输)
  • Qos 2:消息不会丢失也不会重复 (仅有一次传输)
  • 服务质量越稳定可靠性越高的同时对性能损耗越大
  • 根据实际网络情况和服务质量选择质量等级
心跳机制

KeepAlive是在TCP中一个可以检测死连接的机制,不稳定的网络环境可能会让连接进入假死状态,为了减少对上层的影响,客户端和代理都需要及时感知连接是否处于异常状态,底层tcp协议的KeepAlive感知所需时间太长,mqtt自己定义了一套KeepAlive机制,客户端需要定期发送心跳报文,用来感知异常状态进行断开

心跳是创建连接的时候,在connect报文中指定,指定时间单位是s,假设KeepAlive指定心跳时间为1分钟,当客户端连接空闲时间超过1分钟时,向broker发送心跳报文PINGREQ,broker收到心跳请求后返回心跳响应PINGRESP,如果broker超过1.5分钟时间没有收到心跳请求则断开连接,可以投递遗嘱消息到订阅方,如果客户端超过一定时间没有收到心跳响应也断开连接

  • 遗嘱消息:

    在MQTT中采用发布订阅模式,实际通信的双方不会直接进行连接,所有通信的客户端无法感知对方的在线状态,遗嘱机制就是客户端连接的时候向代理设置自己的遗嘱内容,一旦代理发现连接异常断开,就向所有订阅该遗嘱的客户端发送遗嘱消息

  • 保留消息

    发布一条消息的时候,如果订阅方不在线,就会错过这条消息,如果不想这样可以使用保留消息功能,让broker保留向主题发送的最后一条消息,当订阅端重新上线并订阅的时候,broker就会把消息发送过去,这样可以让客户端上线时就收到消息,保持更新,无需等待下次消息

  • 半开连接:

    当通信双方直接的传输因为网络或者其他原因有时会不同步,比如一方发生崩溃或者传输错误,在tcp中这种不完全连接状态称为半开连接,表象是通信的一侧继续运行,不回通知另一侧的故障,仍然连接的一方继续尝试发送消息并等待响应

  • 客户接管 Take-Over:

    客户端与broker连接异常断开,时间小于心跳断开时间,尝试重新连接broker,在未达到心跳时间的时间内,客户端与broker会有两条连接,

    针对此项mqtt重新连接并执行客户端Take-Over措施:先断开之前的连接再建立新的连接

MQTT报文

MQTT总共定义了14种报文类型,按照功能分类可以分为连接、发布、订阅、心跳四类

  • CONNECT-客户端向代理发起连接:

    • 客户端标识符
    • 用户名
    • 密码
    • 遗嘱消息
  • PUBLISH-客户端向代理发布消息:

    • 主题
    • QoS
    • Payload
  • SUBSCRIBE-客户端向代理订阅的主题:

    • 主题
    • QOS
  • 报文格式:

    1. 固定报头-用于所有控制报文:

    2. 可变报头-部分控制报文

    3. 有效载荷-部分控制报文

MQTT-基础理念的更多相关文章

  1. Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块

    Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...

  2. MQTT基础概念介绍

    https://blog.csdn.net/pipinet123/article/details/60866901 源博客地址:http://blog.csdn.net/pipinet123 MQTT ...

  3. http(一)web和网络基础

    深入学习http不为别的,只为补充底层知识,打好根基,深入了解其他技术,擒贼先擒王,学好九阳神功以后,乾坤大挪移,太极剑就容易了,急于求成,就只能变周芷若.走着...... 来源于:图解HTTP 1. ...

  4. Android Apollo MQTT入门

    一.Apache Apollo服务器其实是一个消息中转站 下载地址 http://activemq.apache.org/apollo/download.html 服务搭建方式,参看博客Android ...

  5. MQTT结构分析

    MQTT,是: 轻量级的消息订阅和发布(publish/subscribe)协议 建立在TCP/IP协议之上 IoT,internet of things,物联网,MQTT在这方面应用较多. 官方网站 ...

  6. 物联网时代-跟着Thingsboard学IOT架构-MQTT设备协议

    Thingsboard的MQTT设备协议 thingsboard官网: https://thingsboard.io/ thingsboard GitHub: https://github.com/t ...

  7. Thingsboard之MQTT设备协议简介

    MQTT基础知识 MQTT是一种轻量级的发布 - 订阅消息传递协议,可能使其最适合各种物联网设备.您可以在此处找到有关MQTT的更多信息.ThingsBoard服务器节点充当MQTT Broker,支 ...

  8. MQTT 协议是个啥?这篇文章告诉你!

    文章首发于我的公众号「程序员cxuan」,欢迎大家关注呀- 说到做到! 之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦. 那么读者的要求必须要满足啊,所以 ...

  9. 图形数据库Neo4J简介

    最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有意思的.因此在这里给大家做一个简单的介绍. NoSQL数据库相信大家都听说过.它们常常可以用来处理传统的关系型数 ...

  10. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

随机推荐

  1. .NET 5 开发WPF - 美食应用登录UI设计

    Demo演示: 你的时间宝贵,不想看啰嗦的文字,可直接拉到文末下载源码! 1. 新建项目 站长开发环境: VS 2019企业版 16.70 .NET 5 Preview 5 .NET 5 WPF 项目 ...

  2. 问题--C++单例模式中唯一对象初始化时关于在类外调用私有的无参构造问题

    1.问题 在单例模式中初始化单例对象Person* Person::signal= new Person; 这一步在类外,而new Person需要调用私有的无参构造,但是只有在类内部才能调用私有函数 ...

  3. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.26)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  4. [转帖]RHEL/CentOS 7的systemd target及其中的multi-user.target

    在RHEL/CentOS 6中,使用SysV init和Upstart,通过预定义一组Runlevels(从0到6)表示不同的执行模式. [root@myhost app]# ll /etc/rc.d ...

  5. [转帖]THE OSWATCHER ANALYZER USER'S GUIDE

    oswbba THE OSWATCHER ANALYZER USER'S GUIDE Carl DavisMay 7, 2019 To see how to use this tool and it' ...

  6. [转帖]Linux内核线程kthread简介【最好的一篇!】

    https://zhuanlan.zhihu.com/p/581587583 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求).内核需要多个执行流并行,为了 ...

  7. [转帖]Java 认证与授权(JAAS)介绍

    https://www.cnblogs.com/wuyongyin/p/16981469.html JAAS(Java Authentication Authorization Service),即 ...

  8. [转帖]集群监控之 —— ipmi操作指南

    https://www.cnblogs.com/gaoyuechen/p/8506930.html 这两天,配置了一堆500来个节点的大型集群,被ipmi的问题困扰了一天半,到下午16:40,终于解决 ...

  9. [转帖]Nginx四层负载均衡详解

    https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK 202 ...

  10. 基于javaPoet的缓存key优化实践

    一. 背景 在一次系统opsreview中,发现了一些服务配置了@Cacheable注解.@cacheable 来源于spring cache框架中,作用是使用aop的方式将数据库中的热数据缓存在re ...