我正在尝试通过MQTT-Client-Framework连接到我们的推送服务器。

连接到服务器没有复杂性,只需几行代码,我就可以连接到服务器并订阅主题。

但是我有几个问题,我找不到他们的直接答案。

1)如何让我的客户在后台运行?

2)设备重启后会怎样?设备重启后如何自动连接服务器?

3)假设我在连接服务器时遇到错误。该库是否将尝试循环连接?尝试几次?还是我需要自己解决这个问题?

4)订阅主题的3种情况相同?

最佳答案

根据我在MQTT-客户端框架上的经验,以下是对您的问题/查询的答案。我希望它可以澄清您的疑虑并帮助您前进。

1)如何让我的客户在后台运行?

  • 您不能使MQTT客户端在后台运行,因为Apple不允许任何应用程序在后台长时间运行。虽然如果您覆盖它并不能保证您的应用程序将继续在后台运行。您可以在apple documentation.
  • 中阅读有关后台执行支持的更多信息。
  • 另请参阅github上发布的issue以获取给定的框架。

  • 2)设备重启后会怎样?设备重启后如何自动连接服务器?
  • 每次您的应用开始执行时,您都需要使用MQTT客户端框架连接到服务器,MQTT客户端框架中没有可用的自动连接机制。我建议在应用程序启动后立即执行的特定 Controller 中编写初始化连接,但与AppDelegate
  • 相同

    3)假设我在连接服务器时遇到错误。该库是否将尝试循环连接?尝试几次?还是我需要自己解决这个问题?
  • 如果您的MQTT客户端无法连接服务器,则需要您自己处理它,库不会像上一个答案中所述尝试自动连接。我写了下面的示例代码。使用NSTimer自动连接到服务器。
    [self.mqttSession connectToHost:MQTT_HOST port:MQTT_PORT usingSSL:NO connectHandler:^(NSError *error)
    {
        if(error)
        {
            // Application fail to connect to server, write your code to auto connect here
        }
    }];
    

  • 4)订阅主题的3种情况相同?
  • 如果您的代理服务器配置为跟踪单个用户/客户端的现有订阅,则您无需每次都订阅。
  • 否则,每次成功连接时,您都需要订阅相同的主题。使用以下MQTTSessionDelegate方法进行订阅。
    - (void)connected:(MQTTSession *)session
    

  • 快乐的编码:)

    关于ios - MQTT-客户端框架保持在后台运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36029923/

    10-12 00:18
    查看更多