基于MQTT协议的 org.eclipse.paho.client.mqttv3 源码学习(一)

时间:2024-03-25 20:29:23

一、MQTT协议简叙

MQTT 有以下特点:

  • 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合
  • 使用TCP/IP提供网络连接
  • 有三种发布消息服务质量
  • “至多一次 Qos level=0”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • “至少一次Qos level=1”,确保消息到达,但消息重复可能会发生。
  • “只有一次Qos level=2”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
  • 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
  • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

        MQTT 限制:

  • MQTT协议传输内容格式目前只支持2中,一个为UTF-8和askii,传输的内容最大为256M
  • 目前用的比较多的基于MQTT协议的消息服务器mosquitto  socket 最大连接数仅5W左右。
  、MQTT报文类型  

MQTT消息类型(4-7),使用4位二进制表示,可代表16种消息类型:

Mnemonic Enumeration Description
Reserved 0 Reserved
CONNECT 1 Client request to connect to Server
CONNACK 2 Connect Acknowledgment
PUBLISH 3 Publish message
PUBACK 4 Publish Acknowledgment
PUBREC 5 Publish Received (assured delivery part 1)
PUBREL 6 Publish Release (assured delivery part 2)
PUBCOMP 7 Publish Complete (assured delivery part 3)
SUBSCRIBE 8 Client Subscribe request
SUBACK 9 Subscribe Acknowledgment
UNSUBSCRIBE 10 Client Unsubscribe request
UNSUBACK 11 Unsubscribe Acknowledgment
PINGREQ 12 PING Request
PINGRESP 13 PING Response
DISCONNECT 14 Client is Disconnecting
Reserved 15 Reserved

0->保留 ;1->客户端请求连接到服务器;2->连接确认;3->发布消息;4->发布确认;5->发布收稿(有保证的交付第一部分);

6->出版发行(有保证的交付第二部分);7->发布完整(有保证的交付第三部分);8->客户端订阅请求;9->订阅确认;

10->客户端退订请求;11->退订确认;12->ping请求;13->ping响应;14->客户端端口;15->保留;

  、MQTT消息发布流程 

下图是消息的发布和确认等一些流程,主要是跟消息发布者所设定的QoS level有关。

基于MQTT协议的 org.eclipse.paho.client.mqttv3 源码学习(一)

好了,MQTT协议大致介绍了一下,现在进入对源码的分析、

四、目录分析 

基于MQTT协议的 org.eclipse.paho.client.mqttv3 源码学习(一)

org.eclipse.paho.client.mqttv3 :主要用于对外提供服务,此包里提供的整个功能。

org.eclipse.paho.client.mqttv3.internal: 提供了对mqttv3 中的接口的实现。

org.eclipse.paho.client.mqttv3.internal.nls: 国际化相关文件。学习中可以忽略

org.eclipse.paho.client.mqttv3.internal.security:MQTT支持SSL加密,这个包内实现了基于TLS协议SSLSocket;

org.eclipse.paho.client.mqttv3.internal.wire : MQTT协议中报文信息,里面包含有心跳包、订阅包、发布包、确认包等

org.eclipse.paho.client.mqttv3.persist:发布信息持久化类,MQTT提供两种保持发布消息的方式,一种是将信息保持到文件中,

一种是直接保持 到 内存中。

org.eclipse.paho.client.mqttv3.util:工具类。

org.eclipse.paho.client.mqttv3.logging:日志包

由此可以看出学习基于MQTT协议的paho,只需要啃下蓝色部分包内的内容,基本上就全部掌握了。