Android上的Eclipse Paho MQTT客户端,性能不佳

时间:2018-02-09 21:59:49

标签: android performance mqtt paho

我试图在我的Android应用程序上使用Eclipse Paho MQTT客户端来接收MQTT消息。

我收到~100条消息/秒,消息相当小(基本上是小json对象)。这些消息来自Mosquitto经纪人。

当我订阅MQTT主题并开始接收消息时,我的Android应用程序UI几乎冻结了。我甚至没有对messageArrived回拨中收到的消息做任何事情。

我的Eclipse Paho MQTT客户端使用是超级基本的,几乎与Eclipse Paho示例相同。

Eclipse Paho MQTT客户端的性能是否有问题,或者我可能做错了什么?

我正在使用: org.eclipse.paho.client.mqttv3:1.1.0& org.eclipse.paho.android.service:1.1.1

更新

在我的实际代码下面,它是片段的一部分。所以在这个测试中我只记录收到的消息主题。还有记录,我得到相同的结果,我的应用程序几乎冻结。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mqttAndroidClient = new MqttAndroidClient(getActivity().getApplicationContext(), "tcp://xx.xx.xx.xx:1883", MqttClient.generateClientId());
        mqttAndroidClient.setCallback(new MqttCallbackExtended() {
            @Override
            public void connectComplete(boolean b, String s) {
            }
            @Override
            public void connectionLost(Throwable throwable) {
            }
            @Override
            public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
                Log.d("Mqtt", "messageArrived " + topic);
            }
            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
            }
        });
    }

    @Override
    public void onStart() {
        super.onStart();

        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
        mqttConnectOptions.setAutomaticReconnect(true);
        mqttConnectOptions.setCleanSession(true);

        try {
            mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    try {
                        mqttAndroidClient.subscribe("messages/#", 0);
                    } catch (Exception exception) {
                        Log.e("Mqtt", "subscribe error", exception);
                    }
                }
                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.e("Mqtt", "Connection onFailure ", exception);
                }
            });
        } catch (Exception exception) {
            Log.e("Mqtt", "error " + exception);
        }
    }       

1 个答案:

答案 0 :(得分:0)

问题是Paho Android Service没有使用自己的线程来处理连接,所以一切都在UI线程中完成。

我最终使用了Paho MqttAsyncClient,它自己处理连接。