\u4e00\u3001MQTT\u7b80\u4ecb<\/p>\n
MQTT\uff08Message Queuing Telemetry Transport\uff0c\u6d88\u606f\u961f\u5217\u9065\u6d4b\u4f20\u8f93\uff09\u662f\u4e00\u79cd\u57fa\u4e8e\u5ba2\u6237\u7aef-\u670d\u52a1\u5668\u7684\u6d88\u606f\u53d1\u5e03\/\u8ba2\u9605\u6a21\u5f0f\u7684\u8f7b\u91cf\u7ea7\u901a\u8baf\u534f\u8bae\uff0c\u5b83\u662f\u4e3a\u4e86\u5927\u91cf\u53d7\u9650\u8bbe\u5907\u548c\u4f4e\u5e26\u5bbd\u3001\u9ad8\u5ef6\u8fdf\u6216\u4e0d\u7a33\u5b9a\u7f51\u7edc\u8fde\u63a5\u7684\u5e94\u7528\u73af\u5883\u800c\u8bbe\u8ba1\u3002MQTT\u4e3b\u8981\u7528\u4e8e\u4e07\u7ee9\u7269\u8054\u7f51\u3001\u5b9e\u65f6\u901a\u8baf\u65b9\u9762\u7684\u6280\u672f\u5e94\u7528\uff0c\u5b9e\u73b0\u8bbe\u5907\u4e4b\u95f4\u7684\u5373\u65f6\u901a\u4fe1\u3002<\/p>\n
\u4e8c\u3001MQTT\u7684\u6838\u5fc3\u7ec4\u4ef6\u53ca\u539f\u7406<\/p>\n
1. MQTT\u534f\u8bae\u7684\u4e09\u4e2a\u6838\u5fc3\u7ec4\u4ef6\uff1a<\/p>\n
– \u53d1\u5e03\u8005\uff08Publisher\uff09\uff1a\u8d1f\u8d23\u53d1\u5e03\u6d88\u606f\u7684\u5ba2\u6237\u7aef\uff0c\u53ef\u4ee5\u662f\u4f20\u611f\u5668\u3001\u63a7\u5236\u5668\u7b49\u7269\u8054\u7f51\u8bbe\u5907\u6216\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n
– \u8ba2\u9605\u8005\uff08Subscriber\uff09\uff1a\u8d1f\u8d23\u63a5\u6536\u7279\u5b9a\u4e3b\u9898\u6d88\u606f\u7684\u5ba2\u6237\u7aef\uff0c\u53ef\u4ee5\u662f\u7269\u8054\u7f51\u8bbe\u5907\u6216\u5e94\u7528\u7a0b\u5e8f\uff0c\u63a5\u6536\u5230\u6d88\u606f\u540e\u8fdb\u884c\u5904\u7406\u3002<\/p>\n
– \u6d88\u606f\u4ee3\u7406\uff08Broker\uff09\uff1a\u4e2d\u95f4\u670d\u52a1\u5668\u8bbe\u5907\uff0c\u8d1f\u8d23\u63a5\u6536\u53d1\u5e03\u8005\u53d1\u9001\u7684\u6d88\u606f\uff0c\u5e76\u5c06\u6d88\u606f\u63a8\u9001\u7ed9\u8ba2\u9605\u8005\u3002<\/p>\n
2. MQTT\u534f\u8bae\u91c7\u7528\u4e3b\u9898\uff08Topic\uff09\u4f5c\u4e3a\u6d88\u606f\u7684\u8fc7\u6ee4\u673a\u5236\u3002<\/p>\n
3. \u5de5\u4f5c\u539f\u7406\uff1a\u53d1\u5e03\u8005\u5c06\u6d88\u606f\u53d1\u5e03\u5230\u6307\u5b9a\u4e3b\u9898\u4e0a\uff0c\u6d88\u606f\u4ee3\u7406\u4ece\u53d1\u5e03\u8005\u63a5\u6536\u6d88\u606f\uff0c\u7136\u540e\u5c06\u6d88\u606f\u63a8\u9001\u7ed9\u8ba2\u9605\u4e86\u76f8\u5e94\u4e3b\u9898\u7684\u8ba2\u9605\u8005\u3002\u901a\u8fc7\u8fd9\u79cd\u5de5\u4f5c\u65b9\u5f0f\uff0c\u5404\u4e2a\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u76f4\u63a5\u8fde\u63a5\uff0c\u4f7f\u5f97\u6d88\u606f\u4f20\u9012\u53d8\u5f97\u66f4\u52a0\u9ad8\u6548\u548c\u7b80\u4fbf\u3002<\/p>\n
\u4e09\u3001MQTT\u7684\u4f18\u7f3a\u70b9<\/p>\n
1. \u4f18\u70b9\uff1a<\/p>\n
– \u534f\u8bae\u8f83\u7b80\u5355\uff0c\u6613\u4e8e\u5b9e\u73b0\u3002<\/p>\n
– \u4f20\u8f93\u901f\u5ea6\u5feb\uff0c\u9002\u7528\u4e8e\u5b9e\u65f6\u901a\u4fe1\u3002<\/p>\n
– \u6d88\u606f\u4ee3\u7406\u5904\u7406\u6d88\u606f\u5206\u53d1\uff0c\u964d\u4f4e\u8bbe\u5907\u95f4\u901a\u4fe1\u590d\u6742APP\u5f00\u53d1<\/a>\u5ea6\u3002<\/p>\n
– \u826f\u597d\u7684\u5b89\u5168\u6027\uff0c\u652f\u6301TLS\/SSL\u52a0\u5bc6\u3002<\/p>\n
– \u53ef\u7528\u4e8e\u7f51\u7edc\u4e0d\u7a33\u5b9a\u7684\u73af\u5883\u3002<\/p>\n
\u56db\u3001App\u4e2d\u5b9e\u73b0MQTT<\/p>\n
implementation ‘org.eclipse.paho.android:org.eclipse.paho.android.service:1.1.1’<\/p>\n
public class MQTTManager {<\/p>\n
private static final String BROKER_URI = “tcp:\/\/your_mqtt_server_ip:port”;<\/p>\n
private MqttAndroidClient mqttAndroidClient;<\/p>\n
public MQTTManager(Context context) {<\/p>\n
`<\/p>\n
3. \u5b9e\u73b0\u56de\u8c03\u63a5\u53e3\uff1a\u6dfb\u52a0\u56de\u8c03\u63a5\u53e3 `MqttCallback`:<\/p>\n
“`java<\/p>\n
public class MQTTManager implements MqttCallback {<\/p>\n
\/\/…MQTTManager\u7684\u5176\u4ed6\u4ee3\u7801<\/p>\n
public void setCallback() {<\/p>\n
mqttAndroidClient.setCallback(this);<\/p>\n
}<\/p>\n
@Override<\/p>\n
public void connectionLost(Throwable cause) {<\/p>\n
\/\/ \u8fde\u63a5\u4e22\u5931\uff0c\u53ef\u4ee5\u5728\u8fd9\u91cc\u5904\u7406\u76f8\u5173\u903b\u8f91<\/p>\n
}<\/p>\n
@Override<\/p>\n
public void messageArrived(String topic, MqttMessage message) throws Exception {<\/p>\n
\/\/ \u6536\u5230\u6d88\u606f\uff0cAPP<\/a>\u53ef\u4ee5\u5728\u8fd9\u91cc\u5904\u7406\u76f8\u5173\u903b\u8f91<\/p>\n
public void deliveryComplete(IMqttDeliveryToken token) {<\/p>\n
4. \u8fde\u63a5\u3001\u8ba2\u9605\u3001\u53d1\u5e03\uff1a<\/p>\n
public class MQTTManager {<\/p>\n
\/\/ \u5b9e\u73b0\u8fde\u63a5<\/p>\n
public void connect(final IMqttActionListener listener) {<\/p>\n
IMqttToken token = mqttAndroidClient.connect();<\/p>\n
token.setActionCallback(listener);<\/p>\n
} catch (MqttException e) {<\/p>\n
\/\/ \u8ba2\u9605\u4e3b\u9898<\/p>\n
public void subscribe(String topic) {<\/p>\n
mqttAndroidClient.subscribe(topic, 0);<\/p>\n
} catch (MqttException e) {<\/p>\n
\/\/ \u53d1\u5e03\u6d88\u606f<\/p>\n
public void publish(String topic, String message) {<\/p>\n
MqttMessage mqttMessage = new MqttMessage();<\/p>\n
mqttMessage.setPayload(message.getBytes());<\/p>\n
mqttAndroidClient.publish(topic, mqttMessage);<\/p>\n
} catch (Exception e) {<\/p>\n