ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅谈MQTT

2019-07-20 13:02:37  阅读:176  来源: 互联网

标签:协议 浅谈 订阅 会话 MQTT 消息 客户端


一、什么是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)

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

标签:协议,浅谈,订阅,会话,MQTT,消息,客户端
来源: https://www.cnblogs.com/xiguadadage/p/11216463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有