我正在使用CocoaMQTT来连接和发布事件。要发布,连接到MQTT是很重要的。但是连接是异步的,发布也是。我希望它是顺序的,首先连接,一旦连接,然后发布,所以例如,如果连接发生在5分钟后,发布应该发生在5分钟后。
https://github.com/emqtt/CocoaMQTT
我该怎么做呢?
下面是我的代码:
class ViewController: UIViewController {
var iot: MQTTDelegate!
@IBAction func click(_ sender: Any) {
self.iot = IoT(
withClientId: "clientId",
host: "host",
port: 1883
)
iot.connect(username: "username", password: "token")
iot.publish(topic: "hello", message: "")
}
}
如果我把连接移到一个单独的按钮,那么它的工作原理就像我先点击连接按钮,然后我点击"点击"按钮,所以它是连续的。我如何使上面的代码连续?
我用PromiseKit来承诺代码,但我不知道到底要实现什么连接。
1条答案
按热度按时间w8rqjzmb1#
看起来您正在尝试建立到MQTT服务器的连接并将消息发布到主题,但是由于异步行为,连接是在消息发布之后建立的。
要解决此问题,可以使用MQTTClient类的connect()方法在发布消息之前建立连接。connect()方法接受一个完成块,在建立连接或发生错误时调用该块。
下面是一个示例,说明如何修改代码以在发布消息之前建立连接:
这样,到MQTT服务器的连接将在消息发布之前建立,并且消息将在连接准备就绪后立即发送。