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

来源:互联网 发布:java调用javascript 编辑:程序博客网 时间:2024/06/08 11:11

一、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种消息类型:

MnemonicEnumerationDescriptionReserved0ReservedCONNECT1Client request to connect to ServerCONNACK2Connect AcknowledgmentPUBLISH3Publish messagePUBACK4Publish AcknowledgmentPUBREC5Publish Received (assured delivery part 1)PUBREL6Publish Release (assured delivery part 2)PUBCOMP7Publish Complete (assured delivery part 3)SUBSCRIBE8Client Subscribe requestSUBACK9Subscribe AcknowledgmentUNSUBSCRIBE10Client Unsubscribe requestUNSUBACK11Unsubscribe AcknowledgmentPINGREQ12PING RequestPINGRESP13PING ResponseDISCONNECT14Client is DisconnectingReserved15Reserved

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 :主要用于对外提供服务,此包里提供的整个功能。

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,只需要啃下蓝色部分包内的内容,基本上就全部掌握了。

阅读全文
0 0