• MQTT協議簡要介紹

    時間:2014年11月20日 點擊:1422

    MQTT - MQ Telemetry Transport


    • 輕量級的 machine-to-machine 通信協議。
    • publish/subscribe模式。
    • 基于TCP/IP。
    • 支持QoS。
    • 適合于低帶寬、不可靠連接、嵌入式設備、CPU內存資源緊張。
    • 是一種比較不錯的Android消息推送方案。
    • FacebookMessenger采用了MQTT。
    • MQTT有可能成為物聯網的重要協議。
    MQTT協議是為大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:
    1、使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合;
    2、對負載內容屏蔽的消息傳輸;
    3、使用 TCP/IP 提供網絡連接;
    4、有三種消息發布服務質量:
      • “至多一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用于如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。
      • “至少一次”,確保消息到達,但消息重復可能會發生。
      • “只有一次”,確保消息到達一次。這一級別可用于如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。
    5、小型傳輸,開銷很?。ü潭ㄩL度的頭部是 2 字節),協議交換最小化,以降低網絡流量;
    6、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制

    消息體

     
     
    bit 7 6 5 4 3 2 1 0
    byte 1 Message Type DUP flag QoS level RETAIN
    byte 2 Remaining Length
     

    MessageType

    Mnemonic Enumeration Description
    Reserved 0 Reserved
    CONNECT 1 Client request to connect to Server
    CONNACK 2 Connect Acknowledgment
    PUBLISH 3 Publish message
    PUBACK 4 Publish Acknowledgment
    PUBREC 5 Publish Received (assured delivery part 1)
    PUBREL 6 Publish Release (assured delivery part 2)
    PUBCOMP 7 Publish Complete (assured delivery part 3)
    SUBSCRIBE 8 Client Subscribe request
    SUBACK 9 Subscribe Acknowledgment
    UNSUBSCRIBE 10 Client Unsubscribe request
    UNSUBACK 11 Unsubscribe Acknowledgment
    PINGREQ 12 PING Request
    PINGRESP 13 PING Response
    DISCONNECT 14 Client is Disconnecting
    Reserved 15 Reserved
     
    CONNECT
    TCP連接建立完畢后,Client向Server發出一個Request。
    如果一段時間內接收不到Server的Response,則關閉socket,重新建立一個session連接。
    如果一個ClientID已經與服務器連接,則持有同樣ClientID的舊有連接必須由服務器關閉后,新建立才能建立。
     
    CONNACK
    Server發出Response響應。
    0x00 Connection Accepted
    0x01 Connection Refused: unacceptable protocol version
    0x02 Connection Refused: identifier rejected
    0x03 Connection Refused: server unavailable
    0x04 Connection Refused: bad user name or password
    0x05 Connection Refused: not authorized
     
    PUBLISH 發布消息
    Client/Servier均可以進行PUBLISH。
    publish message 應該包含一個TopicName(Subject/Channel),即訂閱關鍵詞。
     
    關于Topic通配符
    /:用來表示層次,比如a/b,a/b/c。
    #:表示匹配>=0個層次,比如a/#就匹配a/,a/b,a/b/c。
    單獨的一個#表示匹配所有。
    不允許 a#和a/#/c。
    +:表示匹配一個層次,例如a/+匹配a/b,a/c,不匹配a/b/c。
    單獨的一個+是允許的,a+不允許,a/+/b不允許
     
    PUBACK 發布消息后的確認
    QoS=1時,Server向Client發布該確認(Client收到確認后刪除),訂閱者向Server發布確認。
     
    PUBREC / PUBREL / PUBCOMP
    QoS=2時
    1. Server->Client發布PUBREC(已收到);
    2. Client->Server發布PUBREL(已釋放);
    3. Server->Client發布PUBCOMP(已完成),Client刪除msg;
    訂閱者也會向Server發布類似過程確認。
     
    PINGREQ / PINGRES 心跳
    Client有責任發送KeepAliveTime時長告訴給Server。在一個時長內,發送PINGREQ,Server發送PINGRES確認。
    Server在1.5個時長內未收到PINGREQ,就斷開連接。
    Client在1個時長內未收到PINGRES,斷開連接。
    一般來說,時長設置為幾個分鐘。最大18hours,0表示一直未斷開。
     
     

    QoS

     
    QoS value bit 2 bit 1 Description
    0 0 0 At most once Fire and Forget <=1
    1 0 1 At least once Acknowledged delivery >=1
    2 1 0 Exactly once Assured delivery =1
    3 1 1 Reserved
    QoS=0:最多一次,有可能重復或丟失。
     
    QoS=1:至少一次,有可能重復。
    Client[Qos=1,DUP=0/*重復次數*/,MessageId=x] --->PUBLISH--> Server收到后,存儲Message,發布,刪除,向Client回發PUBACK
    Client收到PUBACK后,刪除Message;如果未收到PUBACK,設置DUP++,重新發送,Server端重新發布,所以有可能重復發送消息。
     
    QoS=2:只有一次,確保消息只到達一次(用于比較嚴格的計費系統)。
     
     

    Clean Session

     
    如果為false(flag=0),Client斷開連接后,Server應該保存Client的訂閱信息。
    如果為true(flag=1),表示Server應該立刻丟棄任何會話狀態信息。

    贊助商鏈接

    熱門內容

    相關內容

    聯系我們

    聯系方式
    亚洲AV口工动漫在线观看无码