【问题标题】:MQTT Eclipse Paho client on Android, disconnect hangs and never completesAndroid上的MQTT Eclipse Paho客户端,断开连接挂起并且永远不会完成
【发布时间】:2012-10-31 12:42:31
【问题描述】:

我在一个 android 应用程序中使用 MQTT,使用 Eclipse Paho 页面上的最新 jar。

我通过在 QOS 为 1 下发送偶尔发布来手动检查连接,如果在特定超时下未交付,我会断开 MQTT 并重新连接。当数据连接丢失然后重新连接时,我也会强制重新连接。

问题是 disconnect 方法挂起线程并且永远不会完成 - 即使是零超时或负超时。它应该有一个 30 秒的内部超时,但它已经过了很长时间并且永远不会完成。

MqttClient 对象需要断开连接,否则它会在后台咀嚼数据。我现在正在做的是分离一个单独的线程来断开 MQTT,然后完全创建一个新的 MqttClient。它停止使用数据,但这是一个糟糕的解决方案,因为新线程只是挂起。

有什么想法吗?

编辑: 在进一步调查中,它似乎阻止了尝试在第 70 行停止 CommsReceiver:

public void stop() throws IOException {
    synchronized (lifecycle) {
        //@TRACE 850=stopping receiver
        trace.trace(Trace.FINE,850);
        if (running) {
            running = false;
            try {
                //@TRACE 851=stop: wait on lifecycle
                trace.trace(Trace.FINE,851);
                // Wait for the thread to finish.
                lifecycle.wait(); // THREAD HANGS //
            }
            catch (InterruptedException ex) {
            }
        }
    }
}

【问题讨论】:

    标签: android push mqtt


    【解决方案1】:

    如果您使用 paho 存储库的开发分支中的代码,问题是由于 paho 客户端的稳定版本中的时间窗口。你不应该遇到这个问题,因为它在这个错误https://bugs.eclipse.org/bugs/show_bug.cgi?id=394066 中被标记为已修复,尽管它不是我发现开发分支可靠的稳定分支。

    【讨论】:

      【解决方案2】:

      这里提交了一个错误: https://bugs.eclipse.org/bugs/show_bug.cgi?id=394066(可能是这个问题的 OP,@Vipul 的信息)。状态显示已解决,因此请查看新 JAR 何时可用于修复并使用它

      【讨论】:

        猜你喜欢
        • 2018-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多