一、什么是MQTT

MQTT的全称是“ Message Queuing Telemetry Transport”,即消息队列遥测传输,是一种基于订阅/发布模式的应用层协议,而http是一种基于restful风格的一种应用层协议。

MQTT协议是一种轻量级协议,作为一种低开销、低带宽占用的即时通讯协议,常被应用于物联网项目。同样基于订阅/发布模式的中间件有ActiveMQ,Kafka等消息中间件,归根结底实现的都是消息的传输。

二、如何理解MQTT

MQTT的是一种应用层协议,每一种协议都有其适用场景,而MQTT常被应用于消息推送,消息采集。例如温度检测仪器定时上传温度、检测矿洞氧气浓度等。

MQTT是基于TCP/IP的一种应用层协议,TCP/IP本身已实现了在不可靠的网络环境提供可靠的网络传输的功能,而MQTT协议也有其保障消息可靠传输的策略。

MQTT推送的消息有三种消息质量

1.至多一次,即消息只推送一次,至于消息有没有推送成功

2.至少一次,需要确认消息到达,可能会导致收到重复数据(注:MQTT定义的重发机制与tcp的重复机制是不同的,tcp的重复机制是在限定时间内如果没有收到对应序号的响应报文,则会重新推送该序列号对应的报文,而MQTT的重发机制是在客户端重新建立连接时,

补发之前没有对应响应报文的数据包,当然客户端可以选择是否要接收这些之前没有传输成功的数据包。最开始使用netty实现MQTT服务器的时候就理解错了,以为MQTT的重复机制与tcp的重复机制一样)

3.只有一次,确认消息只到达一次,常用于对数据要求严格的场景,例如计费场景,订单场景

三、如何使用MQTT

MQTT的客户端和服务端目前已有成熟的开源产品,例如服务端有emqx,客户端有Eclipse Paho Mqtt(Java),都可以方面的引入相应的库快速的实现推送功能(具体可根据需求查看对应的API)。

本质上来将是客户端与服务端建立一个Socket,然后根据MQTT协议规定发送响应的报,例如建立socket后发送connet报文去建立连接,然后服务器会解析该连接报文,并保存该连接的相关信息。

我们可以把MQTT协议的规定当成是我们实现web项目中所实现的业务逻辑。

四、MQTT协议的相关的名词解析

1.订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

2.、会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

3.主题名(Topic Name)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

4.主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

5.负载(Payload)

消息订阅者所具体接收的内容。

最新文章

  1. AMD and CMD are dead之KMDjs在JS工程化的努力
  2. Spring配置文件中别名的使用
  3. [CentOS] 指定命令别名:Alias & 软链接生成命令 ln -s
  4. EPANET中读取INPUT文件的函数文件——INPUT3.C
  5. js文件被浏览器缓存的思考
  6. 【原创】pads2007 Layout 电气连接性检查过孔显示错误
  7. java equals 和hashcode
  8. git记住用户名密码
  9. 《python基础教程》笔记之 异常
  10. HTML5 Canvas绘图系列之一:圆弧等基础图形的实现
  11. [Swust OJ 1023]--Escape(带点其他状态的BFS)
  12. mooc- 基本程序设计方法week1,week2
  13. 【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量和堆栈
  14. 财务CLOUD成本核算
  15. 使用AOP实现方法执行时间和自定义注解
  16. 进程PCB
  17. 微服务架构中APIGateway原理
  18. Cannot determine embedded database driver class for database type NONE
  19. 研究js特效巩固JavaScript知识
  20. php中的后期静态绑定

热门文章

  1. ML:机器学习中常用的Octave语句
  2. SpringMVC与uploadify结合进行上传
  3. Windows完成端口编程
  4. C语言实现常用排序算法——冒泡排序
  5. 【转载】Spring Boot引起的“堆外内存泄漏”排查及经验总结
  6. 一文详解 LVS、Nginx 及 HAProxy 工作原理( 附大图 )
  7. 最全java多线程总结2--如何进行线程同步
  8. Loadrunner做性能测试的主要步骤
  9. 编解码器之战:AV1、HEVC、VP9和VVC
  10. J2SE的基本简介与J2EE/J2ME的差异