首先调用MQTT上的同步或异步消息传递

时间:2014-11-13 13:47:58

标签: android mqtt messagebroker paho

我一直在阅读this教程,以了解Paho android Service API的基础知识,以及我在client.connect(context, callback中阅读的一些内容,其中有两个方法onSuccess()和{ {1}}

  

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

在阅读了我提到的最后两行后,我感到困惑。因为据我所知,让客户端注册到具有onFailure()的calback的本质是处理服务器状态“异步”并从服务器读取。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

  

...要启用回调功能,会向客户端注册回调对象,这在连接到服务器之前最合乎逻辑地完成

这几乎意味着MqttClient.setCallback()应该在连接之前被调用,但不需要发生以使其工作;我没有测试过这个,但这是我从那个陈述中得到的。

我认为会发生的是客户端将连接(或不连接),您的应用程序将无法知道结果,因为该决定是通过回调来实现的。希望这有帮助!