MQTT的使用

文字解讀

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


發(fā)布/訂閱機(jī)制

擬物化解讀

比如一個(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安全的就不在這里說了,開始愉快的去試試吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 一:前言 最近在了解MQTT協(xié)議相關(guān)的內(nèi)容,內(nèi)容有點(diǎn)多,特此把MQTT協(xié)議,以及其從服務(wù)端到客戶端的流程整理出來...
    子夏的不語閱讀 70,761評(píng)論 9 92
  • MQTT協(xié)議內(nèi)部分享 時(shí)間:2018-07-26 講解提綱 協(xié)議文檔的解讀 協(xié)議適用的場景 協(xié)議正確的使用方式 技...
    ProfessorTao閱讀 13,677評(píng)論 0 25
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,205評(píng)論 0 3
  • 第四章 哥布林副本 按任務(wù)的要求,不能修改它們的屬性,也不能增加精英和BOSS的數(shù)量。那么,該如何提高生存率呢?...
    柴一2018閱讀 397評(píng)論 0 1

友情鏈接更多精彩內(nèi)容