0

我一直在阅读教程以了解 的基础知识Paho android Service API,以及我阅读的文本中的一些地方,client.connect(context, callback其中有两种方法onSuccess()onFailure()

如前所述,此示例中使用了同步客户端(MqttClient 与 MqttAsyncClient 相对)。这意味着请求,如连接,将阻塞并返回或抛出异常。没有轮询或读取方法从服务器获取消息,来自服务器的消息可以随时到达。该库提供回调机制来处理此行为,向客户端注册的 MqttCallback 对象中的方法将被适当地调用。MqttCallback 是一个必须由另一个类实现的接口...要启用回调功能,向客户端注册一个回调对象,这在逻辑上最符合逻辑的是在连接到服务器之前完成

在阅读了我提到的最后两行之后,我感到困惑。因为据我了解,让客户端注册到具有的回调的本质connectionLost,deliveryComplete,messageArrived是“异步”处理服务器状态并从服务器读取。

现在,我的问题是,关于我引用的最后两行,我应该如何注册客户端以在连接到服务器本身之前从服务器读取状态?或者换句话说,“为什么“client.callback”应该在“client.connect()”之前调用?

任何人都可以澄清和解释这一点。

4

2 回答 2

1

当您设置回调时,您所做的就是注册在收到新消息时调用哪个函数。在您连接到 MQTT 代理之前,实际上什么都不会发生。您应该在连接之前设置回调,这样您就不会错过任何消息。

例如,如果 cleansession == 0,MQTT 代理将在您连接时立即恢复您之前的会话。如果有消息在等你,而你没有设置回调函数,你可能会错过这些消息。

即使 cleansession == 1,连接后的下一个命令也可能是 MQTTClient_subscribe。出于类似的时间原因,您应该在调用 MQTTClient_subscribe 之前设置回调。所以当你知道cleansession == 1时,它要么是callback-connect-subscribe要么是connect-callback-subscribe。没有太大区别,所以你不妨养成在连接之前设置回调函数的习惯。

于 2015-02-25T22:56:37.870 回答
0

...为了启用回调功能,向客户端注册一个回调对象,这在逻辑上最符合逻辑的是在连接到服务器之前完成

这几乎意味着 MqttClient.setCallback() 应该在连接之前被调用,但不需要为了让它工作而发生;我没有对此进行测试,但这就是我从该声明中得到的。

我假设会发生的是客户端将连接(或不连接)并且您的应用程序将无法知道结果,因为该决定是通过回调到达的。希望这可以帮助!

于 2016-04-01T17:10:01.667 回答