1.什么是MQTT協(xié)議
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測傳輸)是IBM開發(fā)的一個(gè)即時(shí)通訊協(xié)議。
有可能成為物聯(lián)網(wǎng)的重要組成部分。該協(xié)議支持所有平臺(tái),幾乎可以把所有聯(lián)網(wǎng)物品和外部連接起來,被用來當(dāng)做傳感器和致動(dòng)器(比如通過Twitter讓房屋聯(lián)網(wǎng))的通信協(xié)議
2.MQTT協(xié)議的特點(diǎn)
MQTT協(xié)議是為大量計(jì)算能力有限,且工作在低帶寬、不可靠的網(wǎng)絡(luò)的遠(yuǎn)程傳感器和控制設(shè)備通訊而設(shè)計(jì)的協(xié)議,它具有以下主要的幾項(xiàng)特性:
1、使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合;
2、對負(fù)載內(nèi)容屏蔽的消息傳輸;
3、使用 TCP/IP 提供網(wǎng)絡(luò)連接;
4、有三種消息發(fā)布服務(wù)質(zhì)量:
? “至多一次”,消息發(fā)布完全依賴底層 TCP/IP 網(wǎng)絡(luò)。會(huì)發(fā)生消息丟失或重復(fù)。這一級(jí)別可用于如下情 況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無所謂,因?yàn)椴痪煤筮€會(huì)有第二次發(fā)送。
? “至少一次”,確保消息到達(dá),但消息重復(fù)可能會(huì)發(fā)生。
? “只有一次”,確保消息到達(dá)一次。這一級(jí)別可用于如下情況,在計(jì)費(fèi)系統(tǒng)中,消息重復(fù)或丟失會(huì)導(dǎo)致不正確的結(jié)果。
5、小型傳輸,開銷很小(固定長度的頭部是 2 字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量;
6、使用 Last Will 和 Testament 特性通知有關(guān)各方客戶端異常中斷的機(jī)制;
3.Android開啟MQTT連接
在開發(fā)前:
第一:Android項(xiàng)目要先引入下面jar:
第二:要啟動(dòng)AcitveMQ服務(wù)器
Android端使用MQTT協(xié)議連接ActiveMQ服務(wù)器
1.定義url
2.創(chuàng)建MqttClient對象
3.調(diào)用MqttClient對象中connect方法,并通過IMqttActionListener監(jiān)聽連接的結(jié)果
4.Android關(guān)閉MQTT連接
Android端使用MQTT協(xié)議取消連接ActiveMQ服務(wù)器
1.創(chuàng)建MqttClient對象
2.調(diào)用MqttClient對象中disconnect方法
5.自定義MQTT心跳(保持長連接)
Android端使用MQTT協(xié)議與ActiveMQ服務(wù)器端保持長連接
1.定義一個(gè)定時(shí)器:
2.保持長連接
3.發(fā)送心跳包
4.啟動(dòng)訂閱,并開始定時(shí)器
7.測試
運(yùn)行該Android項(xiàng)目查看日志輸出
點(diǎn)擊連接:
保持心跳:
點(diǎn)擊斷開連接:
Android項(xiàng)目下載:https://github.com/LiuJunb/HelloMQTT
6.Android開啟MQTT訂閱
使用第三方的心跳服務(wù)實(shí)現(xiàn)MQTT的訂閱:
1.引入第三方的jar:
2.創(chuàng)建MqttAndroidClient ,并設(shè)計(jì)一個(gè)訂閱的回調(diào)
3.鏈接服務(wù)器(要啟動(dòng)AcitveMQ服務(wù)器)
5.接收訂閱的消息
6.測試訂閱是否成功:
打開ActiveMQ服務(wù)器,發(fā)布一個(gè)與訂閱的主題一樣的消息,看看Android手機(jī)的客戶端是否可以接收到消息
連接服務(wù)器:
訂閱一個(gè)主題:
查看ActiveMQ服務(wù)器:
發(fā)布一個(gè)主題:
查看是否訂閱成功:
MQTT服務(wù)質(zhì)量
(登陸小碼哥社區(qū)原文可查看:MQTT-3.1.1-CN.pdf中文文檔)
在訂閱的時(shí)候可以修改訂閱的服務(wù)質(zhì)量qos:
QoS 0:最多分發(fā)一次
QoS 1: 至少分發(fā)一次
QoS 2: 僅分發(fā)一次
MQTT過濾器
(登陸小碼哥社區(qū)原文可查看:MQTT-3.1.1-CN.pdf中文文檔)
7.Android進(jìn)行MQTT發(fā)布
1-3.前三步與訂閱的一樣
4.開始發(fā)布:
5.測試發(fā)布
在Android手機(jī)的發(fā)布界面,發(fā)布一個(gè)主題,然后打開ActiveMQ服務(wù)器查看是否發(fā)布成功
發(fā)布一個(gè)主題:
查看主題發(fā)布是否成功:
MQTT消息保留
在發(fā)布的時(shí)候可以修改消息是否保留:
8.Android使用MQTT實(shí)現(xiàn)群聊
群聊實(shí)現(xiàn)的原理是:大家訂閱同一個(gè)主題,發(fā)布同一個(gè)主題
1.訂閱同一個(gè)主題:(實(shí)現(xiàn)接收消息)
2.發(fā)布同一個(gè)主題:(實(shí)現(xiàn)發(fā)布消息)
開始兩個(gè)模擬器,連接服務(wù)器:
打開群聊界面:
兩個(gè)模擬器同事訂閱android06主題:
開始發(fā)布消息聊天:
聯(lián)系客服