org.eclipse.paho.client.mqttv3的包布局如下:
org.eclipse.paho.client.mqttv3 Interfaces IMqttActionListener IMqttAsyncClient IMqttClient IMqttDeliveryToken MqttMessageListener IMqttToken MqttCallback MqttCallbackExtended MqttClientPersistence MqttPersistable MqttPingSender Classes BufferedMessage DisconnectedBufferOptions MqttAsyncClient MqttClient MqttConnectOptions MqttDeliveryToken MqttMessage MqttToken MqttTopic TimerPingSender Exceptions MqttException MqttPersistenceException MqttSecurityException org.eclipse.paho.client.mqttv3.internal Interfaces DestinationProvider IDisconnectedBufferCallback NetworkModule Classes ClientComms ClientDefaults ClientState CommsCallback CommsReceiver CommsSender CommsTokenStore ConnectActionListener DisconnectedMessageBuffer ExceptionHelper FileLock LocalNetworkModule MessageCatalog MqttPersistentData ResourceBundleCatalog SSLNetworkModule TCPNetworkModule Token org.eclipse.paho.client.mqttv3.internal.security Classes SimpleBase64Encoder SSLSocketFactoryFactory org.eclipse.paho.client.mqttv3.internal.websocket Classes Base64 WebSocketFrame WebSocketHandshake WebSocketNetworkModule WebSocketReceiver WebSocketSecureNetworkModule Exceptions HandshakeFailedException org.eclipse.paho.client.mqttv3.internal.wire Classes CountingInputStream MqttAck MqttConnack MqttConnect MqttDisconnect MqttInputStream MqttOutputStream MqttPersistableWireMessage MqttPingReq MqttPingResp MqttPubAck MqttPubComp MqttPublish MqttPubRec MqttPubRel MqttReceivedMessage MqttSuback MqttSubscribe MqttUnsubAck MqttUnsubscribe MqttWireMessage MultiByteArrayInputStream MultiByteInteger org.eclipse.paho.client.mqttv3.logging Interfaces Logger Classes JSR47Logger LoggerFactory SimpleLogFormatter org.eclipse.paho.client.mqttv3.persist Classes MemoryPersistence MqttDefaultFilePersistence org.eclipse.paho.client.mqttv3.util Classes Debug Strings
摘要翻译如下:
org.eclipse.paho.client.mqttv3
-----Interfaces-----
IMqttActionListener
void onSuccess(IMqttToken asyncActionToken)
void onFailure(IMqttToken asyncActionToken, java.lang.Throwable exception)
当异步操纵完成时,将会通知该接口的实现者。监听器在MqttToken上注册,令牌与连接或颁布等操纵相关联。
当与MqttAsyncClient上的令牌一起使用时,侦听器将在MQTT客户真个线程上被回调。 如果操纵告成或掉败,监听器将被通知。
监听器快速返回控制非常重要,否则MQTT客户真个操纵将会遏制。
IMqttAsyncClient implements IMqttAsyncClient
使应用措施能够使用非梗阻要领与MQTT处事器进行通信。使用非梗阻客户端允许应用措施使用梗阻和非梗阻样式的混合。
IMqttClient
使用梗阻客户端只允许应用措施使用一种样式。 梗阻客户端供给了与早期版本的MQTT客户真个兼容性。
IMqttDeliveryToken extends IMqttToken
IMqttToken的子类,跟踪动静的通报。
与IMqttToken交付令牌的实例差别,可以在连接和客户端从头启动时使用。 这样可以在发送掉败后跟踪动静。
IMqttMessageListener
动静达到时会通知此接口的实现者。
IMqttToken
供给跟踪异步任务完成的机制。
MqttCallback
当产生与客户审察关的异步事件时,使应用措施得到通知。实现此接口的类可以在两种类型的客户端上注册:
IMqttClient.setCallback(MqttCallback)和IMqttAsyncClient.setCallback(MqttCallback)
void connectionLost (java.lang.Throwable cause)
当与处事器的连接丢掉时挪用此要领。
void deliveryComplete ( IMqttDeliveryToken token) 在动静通报完成时挪用,并且已收到所有确认。
void messageArrived (java.lang.String topic, MqttMessage message) 当动静从处事器达到时挪用此要领。
MqttCallbackExtended extends MqttCallback
扩展MqttCallback以允许新的回调,而不会中断现有应用措施的API。 实现此接口的类可以在两种类型的客户端上注册:
IMqttClient.setCallback(MqttCallback)和IMqttAsyncClient.setCallback(MqttCallback)
void connectComplete (boolean reconnect, java.lang.String serverURI)
当与处事器的连接告成完成时挪用。
担任的要领 connectionLost , deliveryComplete , messageArrived
MqttClientPersistence
暗示一个长期性数据存储,用于存储出站和入站邮件,以便传送到指定的QoS。
您可以使用MqttClient.MqttClient(String, String, MqttClientPersistence)指定该接口的实现,
MqttClient将使用该MqttClient来连结QoS 1 和 2 动静。
如果界说的要领抛出MqttPersistenceException,那么数据长期化的状态应连结为被挪用要领之前的状态。
例如,如果put(String, MqttPersistable)在任何时候抛出异常,那么数据将被假定为不在长期存储中。
同样,如果remove(String)抛出一个异常,那么数据将被认为仍然生存在长期性存储中。
长期性接口由记录在诊断连续性故障时可能需要的任何异常或错误信息。
MqttPersistable
暗示一个东西,用于通报要在MqttClientPersistence接口上长期生存的数据。
当数据通过接口通报时,标题和有效载荷是分隔的,以制止不须要的动静拷贝。
MqttPingSender
暗示每个连结勾当时间间隔用于向MQTT代办代理发送ping数据包的东西。
void init ( ClientComms comms) 初始要领。
void schedule (long delayInMilliseconds)
布置下一个ping在必然的延迟。
void start () 开始ping发送者。
void stop ()
遏制ping发件人。
========= Classes ========
BufferedMessage
一个BufferedMessage包罗一个MqttWire动静和令牌,它允许当客户端处于静止状态时缓感动静和令牌
DisconnectedBufferOptions
生存用于打点离线(或断开)缓感动静行为的选项集
MqttAsyncClient
轻量级客户端,使用允许在后台运行操纵的非梗阻要领与MQTT处事器交互。
默认情况下,使用MqttDefaultFilePersistence将动静存储到文件中。 如果将长期性设置为null,则动静将存储在内存中。
MqttClient implements IMqttClient
轻量级客户端,使用梗阻操纵完成的要领与MQTT处事器交互。
MqttConnectOptions
生存一组控制客户端连接随处事器的选项。
static boolean CLEAN_SESSION_DEFAULT 如果没有指定默认清理会话设置
static int CONNECTION_TIMEOUT_DEFAULT 如果没有指定默认的连接超不时间(以秒为单位)
static int KEEP_ALIVE_INTERVAL_DEFAULT 如果未指定,则以秒为单位的默认连结勾当时间间隔
static int MAX_INFLIGHT_DEFAULT 如果没有指定,则默认为最大航程
static int MQTT_VERSION_3_1
static int MQTT_VERSION_3_1_1
static int MQTT_VERSION_DEFAULT 首先默认的MqttVersion是3.1.1 ,如果掉败,则返回到3.1
MqttDeliveryToken extends MqttToken implements IMqttDeliveryToken
供给跟踪动静通报进度的机制。用于以非梗阻方法(在后台运行)跟踪动静的发送进度。
MqttMessage
MQTT动静包罗应用措施有效负载和选项,指定如何通报动静。动静包罗暗示为byte []的“payload”(动静体)。
MqttToken implements IMqttToken
供给跟踪异步操纵完成的机制。实现ImqttToken接口的令牌从所有非梗阻要领返回,颁布除外。
MqttTopic
暗示主标题问题标,用于颁布/订阅动静通报。
TimerPingSender implements MqttPingSender
默认ping发送者执行
这个类实现了IMqttPingSender pinger接口,允许应用措施在每个勾当时间间隔IMqttPingSender处事器发送ping数据包。
==== Exceptions ====
MqttExceptionn extends Exception
MqttPersistenceException extends MqttException
MqttSecurityException extends MqttException
=========================================
----------- org.eclipse.paho.client.mqttv3.internal -----------------
======== Interfaces ========
DestinationProvider
这个接口可以作为MqttClient和MqttMIDPClient的一个通用类型,所以它们可以通报给ClientComms而不需要客户端类需要知道另一个。
具体而言,这允许MIDP客户端在没有非MIDP MqttClient / MqttConnectOptions类的情况下事情。
MqttTopic getTopic (java.lang.String topic)
IDisconnectedBufferCallback
void publishBufferedMessage ( BufferedMessage bufferedMessage)
NetworkModule
java.io.InputStream getInputStream ()
java.io.OutputStream getOutputStream ()
java.lang.String getServerURI ()
void start ()
void stop ()
======== Classes ========
ClientComms
措置惩罚惩罚与处事器的客户端通信。 发送和接收MQTT V3动静。
ClientDefaults
public static final int MAX_MSG_SIZE = 1024 * 1024 * 256; // 256 MB
ClientState
客户真个核心,它生存待措置惩罚惩罚和正在进行的动静的状态信息。 已经被接受发送的动静在被递送的同时在几个东西之间移动。
1)当客户端没有运行时,动静被存储在一个实现了MqttClientPersistent接口的长期性存储中。
默认是MqttDefaultFilePersistencew,它可以跨越故障和系统从头启动安适地存储动静。
如果没有指定长期性,则返回到MemoryPersistence,这将在Mqtt客户端实例化时维护动静。
2)当客户端或特定的ClientState被实例化时,将动静从长期性存储中读取到:
- outboundqos2哈希表,如果QoS 2 PUBLISH或PUBREL - outboundqos1哈希表如果QoS 1 PUBLISH(参见restoreState)
3)On Connect,复制动静以messageid挨次将出站哈希表添加到pendingMessages或pendingFlows向量中。
- 初始动静颁布进入pendingmessages缓冲区。 - PUBREL进入待措置惩罚惩罚缓冲区(参见restoreInflightMessages)
4)发送措施线程从待措置惩罚惩罚流和待措置惩罚惩罚动静缓冲区中读打动静。 该动静将从pendingbuffer中删除,但保存在出站*哈希表。
哈希表是将全部未完成动静存储在内存中的处所。 (长期性仅在启动时使用)
5)接收器线程 - 接收有线动静: - 如果QoS 1则从长期性中移除,outboundqos1 - 如果QoS 2 PUBREC发送PUBREL。
使用PUBREL更新outboundqos2条目并更新长期性。 - 如果QoS 2 PUBCOMP从长期性和outboundqos2中移除注意:
由于客户真个多线程特性,对这个类的任何改削都考虑到并发性至关重要。
例如,只要流量/动静放在线路上,接收线程就可以接收确认并在发送方完成措置惩罚惩罚之前措置惩罚惩罚响应。
例如连接可能被发送,在连接通知发送之前收到的conack已经被措置惩罚惩罚!
CommsCallback implements Runnable
Receiver和外部API之间的桥梁。 此类由Receiver挪用,然后将以通信为中心的MQTT动静东西转换为由外部API理解的东西。
CommsReceiver implements Runnable
接收来自处事器的MQTT数据包。
CommsSender implements Runnable
CommsTokenStore
供给基于“令牌”的系统来存储和跟踪跨多个线程的操纵。
发送动静时,令牌与动静相关联,并使用saveToken(MqttToken, MqttWireMessage)要领生存。
任何对这个状态感兴趣的人都可以挪用令牌上的一个期待要领,或者在操纵上使用异步监听器回调要领。
另一个线程上的CommsReceiver类从网络读取响应。 它使用响应来查找相关令牌,然后可以通知它。
注:Ping,连接和断开连接没有独一的动静ID,因为每种类型的只有一个未决的请求被允许未完成
ConnectActionListener implements IMqttActionListener
这个类措置惩罚惩罚AsyncClient到一个可用URL的连接。
这些URL在创建客户端时作为单例供给,或作为连接选项中的列表供给。
这个类使用本身的onSuccess和onFailure回调优先于用户供给的回调。
测验考试连接到列表中的每个URL,直到连接测验考试告成或测验考试了所有URL
如果连接告成,则会通知用户令牌,并挪用用户onSuccess回调。
如果连接掉败,则测验考试列表中的另一个URL,否则将通知用户令牌,并挪用用户onFailure回调
void connect () 开始连接措置惩罚惩罚
void onFailure ( IMqttToken token, java.lang.Throwable exception) 连接掉败,请测验考试列表中的下一个URI。
void onSuccess ( IMqttToken token) 如果连接告成,则挪用用户onSuccess回调
void setMqttCallbackExtended ( MqttCallbackExtended mqttCallbackExtended) 设置MqttCallbackExtened回调接收connectComplete回调
DisconnectedMessageBuffer implements Runnable
ExceptionHelper
工具类可辅佐创建正确类型的例外。
FileLock
LocalNetworkModule implements NetworkModule
特殊的comms类,允许MQTT客户机在与MQTT处事器运行在同一JRE实例中时,使用非TCP /优化机制与MQTT处事器扳谈。
这个类查抄是否存在优化的通信协议类,即供给优化的通信机制的类。 如果不成用,则使用优化机制进行连接的请求将被拒绝。
实现这一点的独一已知的处事器是微型经纪人: - 一个与许多IBM产品一起供给的MQTT处事器。
public abstract class MessageCatalog
private static MessageCatalog INSTANCE = null;
人类可读的错误信息目录。
MqttPersistentData implements MqttPersistable
ResourceBundleCatalog extends MessageCatalog
SSLNetworkModule extends TCPNetworkModule
用于通过SSL连接的网络模块。
TCPNetworkModule implements NetworkModule
一个通过TCP连接的网络模块。
Token
==============================
org.eclipse.paho.client.mqttv3.internal.security
==============================
Classes
SimpleBase64Encoder
private static final String PWDCHARS_STRING = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private static final char[] PWDCHARS_ARRAY = PWDCHARS_STRING.toCharArray();
public static String encode(byte[] bytes)
public static byte[] decode(String string)
private final static String to64(long input, int size)
private final static long from64(byte[] encoded, int idx, int size)
SSLSocketFactoryFactory
一个SSLSocketFactoryFactory供给了一个套接字工厂和一个处事器套接字工厂,然后可以用来创建SSL客户端套接字或SSL处事器套接字。
SSLSocketFactoryFactory使用IBM SSL属性进行配置,即格局为“com.ibm.ssl.propertyName”的属性,例如“com.ibm.ssl.keyStore”。 该类撑持多种配置,每种配置都使用名称或配置ID进行标识。 使用“null”的配置ID作为默认配置。 当为给定配置创建套接字工厂时,首先会选择该配置的属性。 如果在那里没有界说属性,那么在默认配置中查找该属性。 最后,如果还没有找到属性元素,则查抄相应的系统属性,即javax.net.ssl.keyStore。 如果系统属性没有设置,那么使用系统的默认值(如果可用)或引发异常。
SSLSocketFacotryFactory可以在任何时候从头配置。 从头配置不会影响现有套接字工厂。
所有的属性共享不异的密钥空间; 即配置ID不是属性键的一部分。
应按以下挨次挪用要领:
isSupportedOnJVM() :查抄此类是否在运行时平台上受撑持。 并非所有运行时撑持SSL / TLS。
SSLSocketFactoryFactory() :结构函数。 客户端(在同一个JVM中)可能共享一个SSLSocketFactoryFactory,或者每个都有一个。
initialize(properties,,configID) :用配置所需的SSL属性初始化此东西。 这可能会被挪用多次,每次需要配置一次。它可能会被再次挪用来变动特定配置所需的SSL属性
getEnabledCipherSuites(configID) :稍后在套接字上设置启用的暗码套件[见下文]。
对付MQTT处事器:
getKeyStore(configID) :或者,要查抄是否没有密钥库,那么所有启用的暗码套件都是匿名的。
createServerSocketFactory(configID) :创建一个SSLServerSocketFactory。
getClientAuthentication(configID) :稍后在SSLServerSocket(自身从SSLServerSocketFactory创建)上设置是否需要客户端身份验证。
对付MQTT客户端:
createSocketFactory(configID) :创建一个SSLSocketFactory。
================================
org.eclipse.paho.client.mqttv3.internal.websocket
==== Classes ====
Base64
private static final Base64 instance = new Base64();
private static final Base64Encoder encoder = instance.new Base64Encoder();
public static String encode (String s)
public static String encodeBytes (byte[] b)
public class Base64Encoder extends AbstractPreferences
WebSocketFrame 大众类
WebSocketHandshake 大众类。Helper类执行WebSocket握手。
WebSocketNetworkModule extends TCPNetworkModule
WebSocketReceiver implements Runnable
WebSocketSecureNetworkModule extends SSLNetworkModule
==== Exceptions ====
HandshakeFailedException extends Exception
{ private static final long serialVersionUID = 1L; }
==============================
org.eclipse.paho.client.mqttv3.internal.wire
==============================
==== Classes ====
CountingInputStream extends InputStream
计数从中读取的字节的输入流。
private InputStream in;
private int counter;
public CountingInputStream(InputStream in)
public int read() throws IOException
public int getCounter() { return counter; }
public void resetCounter() { counter = 0; }
MqttAck extends MqttWireMessage
所有确认动静的抽象超类。
public MqttAck(byte type) { super(type); }
protected byte getMessageInfo() { return 0; }
MqttConnack extends MqttAck
MQTT CONNACK的在线暗示。
public static final String KEY = "Con";
private int returnCode;
private boolean sessionPresent;
MqttConnect extends MqttWireMessage
private String clientId;
private boolean cleanSession;
private MqttMessage willMessage;
private String userName;
private char[] password;
private int keepAliveInterval;
private String willDestination;
private int MqttVersion;
MqttDisconnect extends MqttWireMessage
MqttInputStream extends InputStream
一个MqttInputStream让应用措施读取MqttWireMessage实例。
private static final String CLASS_NAME = MqttInputStream.class.getName();
private static final Logger log = LoggerFactory.getLogger(LoggerFactory.MQTT_CLIENT_MSG_CAT, CLASS_NAME);
private ClientState clientState = null;
private DataInputStream in;
MqttOutputStream extends OutputStream
一个MqttOutputStream让应用措施编写MqttWireMessage实例。
private static final String CLASS_NAME = MqttOutputStream.class.getName();
private static final Logger log = LoggerFactory.getLogger(LoggerFactory.MQTT_CLIENT_MSG_CAT, CLASS_NAME);
private ClientState clientState = null;
private BufferedOutputStream out;
MqttPersistableWireMessage extends MqttWireMessage implements MqttPersistable
MqttPingReq extends MqttWireMessage
MqttPingResp extends MqttAck
MqttPubAck extends MqttAck
MqttPubComp extends MqttAck
MqttPublish extends MqttPersistableWireMessage
MqttPubRec extends MqttAck
MqttPubRel extends MqttPersistableWireMessage
MqttReceivedMessage extends MqttMessage
MqttSuback extends MqttAck
MqttSubscribe extends MqttWireMessage
MqttUnsubAck extends MqttAck
MqttUnsubscribe extends MqttWireMessage
public abstract class MqttWireMessage
MultiByteArrayInputStream extends InputStream
private byte[] bytesA;
private int offsetA;
private int lengthA;
private byte[] bytesB;
private int offsetB;
private int lengthB;
private int pos = 0;
public MultiByteArrayInputStream(byte[] bytesA, int offsetA, int lengthA, byte[] bytesB, int offsetB, int lengthB){ }
public int read() throws IOException{ }
MultiByteInteger
暗示由MQTT V3规范界说的多字节整数(MBI)。
private long value;
private int length;
public MultiByteInteger(long value)
public MultiByteInteger(long value, int length)
public int getEncodedLength()
public long getValue()
========================
org.eclipse.paho.client.mqttv3.logging
========================
==== Interfaces ====
Logger
==== Classes ====
JSR47Logger implements Logger
使用java.uti.logging的记录器接口的实现使用Java内置日志记录工具的记录器 - java.util.logging。
供给了一个示例java.util.logging属性文件 - jsr47min.properties,演示了如何使用基于内存的跟踪工具运行,该工具以最低的性能开销运行。
当记录/跟踪记录被写入与MemoryHandler触发器级别匹配或在MemoryHandler上挪用push要领时,可以转储内存缓冲区。
Debug供给的要领可以很容易地转储内存缓冲区以及其他有用的调试信息。
LoggerFactory
返回记录器以供MQTT客户端使用的工厂。 默认的日志和跟踪工具使用Java在日志工具中的构建:
- java.util.logging。 对付不成用的系统或需要替代日志框架的系统,可以使用setLogger(String)来替换日志工具,该日志工具需要实现Logger接口。
SimpleLogFormatter extends Formatter
以可读形式打印单行日志记录。
========================
org.eclipse.paho.client.mqttv3.persist
==== Classes ====
MemoryPersistence implements MqttClientPersistence
使用内存的长期性在客户端或设备不需要可靠性从头启动内存的情况下,可以使用该内存长期性。
在需要可靠性的情况下,例如当clean session设置为false时,应使用非易掉性形式的长期性。
MqttDefaultFilePersistence implements MqttClientPersistence
供给基于文件的长期性的MqttClientPersistence接口的实现。 当创建Persistence东西时指定一个目录。
当长期性被打开时(见open(String, String) ),在这个客户端ID和连接键的根本下创建一个子目录。
这允许一个长期性基目录被多个客户共享。
子目录的名称是通过将客户端ID和连接键与‘/‘,‘\\‘,‘:‘或‘‘的任何实例连接而创建的。
========================
org.eclipse.paho.client.mqttv3.util
==== Classes ====
Debug
用于辅佐调试Paho MQTT客户端问题的实用措施一旦初始化对dumpClientDebug的挪用,将强制将任何内存跟踪与相关客户端和系统状态一起加载到主日志设施。
转储进行时,不会执行客户端宽锁。 这意味着客户端状态的调集可能不一致,因为客户端在转储过程中仍可能正在措置惩罚惩罚事情。
Strings
字符串助手
========= END ===========