文字解讀
Mqtt(Message Queuing Telemetry Transport,消息隊(duì)列遙測傳輸)是IBM開發(fā)的用于各種設(shè)備的一種基于發(fā)布/訂閱編程模式的即時(shí)通訊協(xié)議。

擬物化解讀
比如一個(gè)電臺(tái)播放音樂,無論是收音機(jī)、手機(jī)自帶收音機(jī)還是車載收音機(jī),只要調(diào)到這個(gè)調(diào)頻,就可以聽到這個(gè)電臺(tái)播放的音樂。
特點(diǎn):
1、使用發(fā)布/訂閱消息模式,可以進(jìn)行一對(duì)多的消息發(fā)布;
2、對(duì)負(fù)載內(nèi)容屏蔽的消息傳輸;
3、可以使用TCP/IP連接;
4、提供三種消息發(fā)布
“至多一次”,也就是意味著可能一次,也有可能一次也沒(丟失)
“至少一次”,顧名思義,也就是說消息會(huì)多次發(fā)送
“只有一次”,這就表明是只成功發(fā)送一次。
5、小型傳輸(固定長度的頭部是2字節(jié)),可以達(dá)到協(xié)議交換最小化,降低網(wǎng)絡(luò)流量。
6、使用Last Will和Testament特性通知有關(guān)各方客戶端異常中斷的機(jī)制。
消息類型:
1、CONNECT:客戶端連接到MQTT代理
2、CONNACK:連接確認(rèn)
3、PUBLISH:發(fā)布新消息
4、PUBACK:新消息確認(rèn),QoS1給PUBLISH消息回復(fù)
5、PUBREC:QoS2消息流第一部分,消息發(fā)布已經(jīng)記錄
6、PUBREL:QoS2消息流第二部分,消息發(fā)布已經(jīng)釋放
7、PUBCOMP:QoS2消息流第三部分,消息發(fā)布完成
8、SUBSCRIBE:客戶端訂閱主題
9、SUBACK:確認(rèn)客戶端訂閱的主題
10、UNSUBSCRIBE:客戶端終止訂閱消息
11、UNSUBACK:確認(rèn)客戶端終止訂閱消息
12、PINGRESP:心跳
13、PINGREQ:確認(rèn)心跳
14、DISCONNECT:客戶端在終止連接前通知MQTT代理
代碼實(shí)例
HTML部分:
<!-- pub -->
topic:<input type="text" id="topicSend">
text:<input type="text" id="textSend">
<input type="button" value="send" id="btn" onclick="hanleSend()">
<!-- sub -->
<input type="text" id="subCount" disabled>
<ul id="subMessage"></ul>
JavaScript部分:
var subCount = 0;
var client;
function MQTTconent({
client = new Paho.MQTT.Client("主機(jī)名","端口號(hào)","clientId(可選項(xiàng))")
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
client.connect({
userName: "", //連接賬號(hào)
password: "", //密碼
onSuccess: onConnect //連接服務(wù)器并注冊連接成功處理
})
})
// 客戶端連接
function onConnect() {
client.subscribe() //訂閱主題
}
// 連接斷開處理
function onConnectionList(res) {
if(res.errorCode !== 0){
console.log("連接斷開了")
}
}
// 消息接收處理
function onMessageArrived(message) {
var topic = message.destinationName; //收到的消息主題名
var payload = message.payloadString; //收到的消息內(nèi)容
subCount++;
$('#subCount').val('收到' +subCount + '條');
$('#subMessage').prepend('<li>' + topic + ':' + payload + '</li>')
}
// 發(fā)送
function hanleSend() {
var message = new Paho.MQTT.Message($('#textSend').val());
message.destinationName = $('#topicSend').val();
message.qos = 0;
client.send(message)
}
$(document).ready(function(){
MQTTconnect()
})
MQTT安全的就不在這里說了,開始愉快的去試試吧。