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

标签 ios swift xcode swift3 viewcontroller

我正在使用 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/

相关文章:

swift - 如何访问类中的对象

swift - 如何使用 unistd.h 创建 swift 模块

mysql - 需要有关 Mac OS 上的 mySql 的帮助

ios - XCode 自动交付包含许多文件的构建交付

ios - writeToFile 失败,错误 = null

sql - Swift 4 SQLITE 查询输出因 where 子句而失败

iphone - 如何更改 iOS 项目的名称?

iphone - 本地通知“每天上午7:00”通知

ios - AFNetworking后台下载一段时间后自动停止,我需要恢复它

ios - 具有不同文本大小的 ui 段控件