我正在使用 CocoaMQTT 连接和发布事件。为了发布,连接到 MQTT 很重要。但连接是异步的,发布也是异步的。我希望它是连续的,首先它应该连接,连接后然后发布,例如,如果连接发生在 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 来 promise 代码,但我不知道要连接到底要实现什么。
最佳答案
您似乎正在尝试建立与 MQTT 服务器的连接并向主题发布消息,但由于异步行为,连接是在消息发布后建立的。
要解决此问题,您可以在发布消息之前使用 MQTTClient 类的 connect() 方法建立连接。 connect() 方法采用一个完成 block ,该完成 block 在建立连接或发生错误时调用。
以下示例说明了如何修改代码以在发布消息之前建立连接:
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 服务器的连接,并且一旦连接准备好就会发送消息。
关于ios - 由于异步,在发布后连接到 MQTT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44464840/