您的位置:首页 > 编程语言 > Java开发

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

2017-08-02 14:31 405 查看
一、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种消息类型:
MnemonicEnumerationDescription
Reserved0Reserved
CONNECT1Client request to connect to Server
CONNACK2Connect Acknowledgment
PUBLISH3Publish message
PUBACK4Publish Acknowledgment
PUBREC5Publish Received (assured delivery part 1)
PUBREL6Publish Release (assured delivery part 2)
PUBCOMP7Publish Complete (assured delivery part 3)
SUBSCRIBE8Client Subscribe request
SUBACK9Subscribe Acknowledgment
UNSUBSCRIBE10Client Unsubscribe request
UNSUBACK11Unsubscribe Acknowledgment
PINGREQ12PING Request
PINGRESP13PING Response
DISCONNECT14Client is Disconnecting
Reserved15Reserved
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,只需要啃下蓝色部分包内的内容,基本上就全部掌握了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: