Android 上的 Eclipse Paho MQTT 客户端,性能不佳
Eclipse Paho MQTT client on Android, poor performance
我正在尝试在我的 Android 应用程序上使用 Eclipse Paho MQTT 客户端来接收 MQTT 消息。
我收到了 ~100 message/second,消息相当小(基本上是小的 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);
}
}
问题是 Paho Android 服务没有使用自己的线程来处理连接,所以一切都在 UI 线程中完成。
我最终使用了 Paho MqttAsyncClient,它以自己的方式处理连接。
我正在尝试在我的 Android 应用程序上使用 Eclipse Paho MQTT 客户端来接收 MQTT 消息。
我收到了 ~100 message/second,消息相当小(基本上是小的 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);
}
}
问题是 Paho Android 服务没有使用自己的线程来处理连接,所以一切都在 UI 线程中完成。
我最终使用了 Paho MqttAsyncClient,它以自己的方式处理连接。