xcode 由于异步,在发布后连接到MQTT

nc1teljy  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在使用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来承诺代码,但我不知道到底要实现什么连接。

w8rqjzmb

w8rqjzmb1#

看起来您正在尝试建立到MQTT服务器的连接并将消息发布到主题,但是由于异步行为,连接是在消息发布之后建立的。
要解决此问题,可以使用MQTTClient类的connect()方法在发布消息之前建立连接。connect()方法接受一个完成块,在建立连接或发生错误时调用该块。
下面是一个示例,说明如何修改代码以在发布消息之前建立连接:

client.connect { error in
  if error == nil {
    // Connection was successful
    client.publish("topic", withString: "Hello, World!")
  } else {
    // There was an error connecting to the MQTT server
  }
}

这样,到MQTT服务器的连接将在消息发布之前建立,并且消息将在连接准备就绪后立即发送。

相关问题