AndroidMQtt通信消息推行的實現

1.      MQTTMessageQueuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成爲物聯網的重要組成部分。該協議支持所有平臺,幾乎可以把所有聯網物品和外部連接起來,被用來當做傳感器和致動器(比如通過Twitter讓房屋聯網)的通信協議。

2.      MQTT協議是爲大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:

1、使用發佈/訂閱消息模式,提供一對多的消息發佈,解除應用程序耦合;

2、對負載內容屏蔽的消息傳輸;

3、使用 TCP/IP 提供網絡連接;

4、有三種消息發佈服務質量:

o       至多一次,消息發佈完全依賴底層TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因爲不久後還會有第二次發送。

o       至少一次,確保消息到達,但消息重複可能會發生。

o       只有一次,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重複或丟失會導致不正確的結果。

5、小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量;

6、使用 Last Will Testament 特性通知有關各方客戶端異常中斷的機制;

3.      Mqtt核心代碼

1)     服務器連接和消息訂閱

String url = String.format(Locale.US, MQTT_URL_FORMAT, MQTT_BROKER,
				MQTT_PORT);
		Log.i(DEBUG_TAG, "Connecting with URL: " + url);
		try {
			if (mDataStore != null) {
				Log.i(DEBUG_TAG, "Connecting with DataStore");
				mClient = new MqttClient(url, mDeviceId, mDataStore);
			} else {
				Log.i(DEBUG_TAG, "Connecting with MemStore");
				mClient = new MqttClient(url, mDeviceId, mMemStore);
			}
		} catch (MqttException e) {
			e.printStackTrace();
		}

		mConnHandler.post(new Runnable() {
			@Override
			public void run() {
				try {
					mClient.connect(mOpts);

					mClient.subscribe("/anyclink/5", 0);
					

					mClient.setCallback(MqttService.this);

					mStarted = true; // Service is now connected

					Log.i(DEBUG_TAG,
							"Successfully connected and subscribed starting keep alives");

					startKeepAlives();
				} catch (MqttException e) {
					e.printStackTrace();
				}
			}
		});

2)     Mqtt消息訂閱的取消

if (mClient != null) {
			try {
				mClient.disconnect();
				mClient.unsubscribe("/anyclink/5");
			} catch (MqttException ex) {
				ex.printStackTrace();
			}

			stopKeepAlives();

			mClient = null;
		}

4.      服務器搭建

1)     安裝文件的下載地址:點擊打開鏈接

2)     服務器搭建方法:點擊打開鏈接

3) 源碼下載地址:點擊打開鏈接


發佈了21 篇原創文章 · 獲贊 26 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章