对MQTT的一些笔记整理

这里只是做了一些简单的笔记,这些内容都是通过看一个大神的文章MQTT协议中文版文档总结的一些笔记:

1.MQTT协议的实现方式:

2.对传输消息有三种服务质量(QoS):

  • Qos0:最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:


  • QoS1:至少一次,这一级别会确保消息到达,但消息可能会重复。即:>=1


  • QoS2:只有一次,确保消息只有一次到达。即:=1。(推送使用的是这一种):


3.客户端和服务端:

和传统的协议不同,MQTT是一个基于客户端和服务端的发布/订阅模式的消息传输协议。

真正的“服务器端”指的是中间的代理部分(broker),发布者和订阅者都属于“客户端”。

客户端 Client
使用MQTT的程序或设备。客户端总是通过网络连接到服务端。它可以

  • 发布应用消息给其它相关的客户端。
  • 订阅以请求接受相关的应用消息。
  • 取消订阅以移除接受应用消息的请求。
  • 从服务端断开连接。

服务端 Server
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端

  • 接受来自客户端的网络连接。
  • 接受客户端发布的应用消息。
  • 处理客户端的订阅和取消订阅请求。
  • 转发应用消息给符合条件的已订阅客户端。

4.控制报文的结构:

  • Fixed header: 固定报头,所有控制报文都包含 一般为1个字节
  • Variable header: 可变报文,部分控制报文包含
  • Payload: 有效载荷,部分控制报文包含

5.遗嘱(will flag:

6.关于CleanSession:

  这个是eclipse.paho.mqtt.golang里面的一个函数,这个实在看文档的时候发现的一个不太理解问题。然后通过查其他资料解决的。
  是用来控制session flags的。

如果cleanSession被置为true那么客户端将不存在持久会话并且在任何情况下连接断开时所有的消息都会被丢弃。当cleanSession被置为false时,持久会话将会被创建,直至客户端再次将cleanSession置为true。如果一个持久会话是可用的,那么消息将会以队列的形式投递给可用的客户端。
在连接之前,您必须设置 cleanSession 方式;在整个会话期间都将保持此方式。要更改此属性的设置,必须将客户机断开连接,然后再重新连接客户机。如果您将cleanSession=false 更改为 cleanSession=true,那么此客户机先前的所有订阅以及尚未接收到的任何发布都将被废弃。

联合使用session flags和wills令你可以处理源于不稳定的网络及自动化服务规模的问题。

7.安全性问题:

这部分东西有点多,没时间详细总结,先放一个链接在这吧......
MQTT协议中文版 第五章 安全

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,958评论 19 139
  • MQTT Protocol MQTT协议特性 一句话总结:MQTT是一个简单,轻量的消息发布/订阅协议。 MQTT...
    福克斯记阅读 7,287评论 0 9
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,169评论 6 13
  • iOS开发中,关于MQTT的三方库主要有两种。 基于C实现的Mosquitto库。当然直接去调用C的接口并不是特别...
    Noskthing阅读 24,590评论 20 22
  • 秋色满天天映水, 烟岚锁树树蹁跹。 残阳似血徐徐落, 泪水忽然湿眼帘。
    牛皮社阅读 282评论 0 9