天天看點

阿裡雲物聯網平台 > 裝置接入 > 使用開放協定自主接入 > MQTT協定接入 >MQTT-WebSocket連接配接通信

MQTT-WebSocket連接配接通信

更新時間:2020-09-08 16:57:21

編輯我的收藏

本頁目錄

  • 背景資訊
  • 操作步驟

物聯網平台支援基于WebSocket的MQTT協定。您可以首先使用WebSocket建立連接配接,然後在WebSocket通道上,使用MQTT協定進行通信,即MQTT over WebSocket。

背景資訊

使用WebSocket方式主要有以下優勢:

  • 使基于浏覽器的應用程式可以像普通裝置一樣,具備與服務端建立MQTT長連接配接的能力。
  • WebSocket方式使用443端口,消息可以順利穿過大多數防火牆。

操作步驟

  1. 證書準備。

    WebSocket可以使用ws和wss兩種方式,ws就是普通的WebSocket連接配接,wss就是增加了TLS加密。如果使用wss方式進行安全連接配接,需要使用和TLS直連一樣的根證書。

  2. 用戶端選擇。

    直接使用官方用戶端,隻需要替換連接配接URL即可。其他語言版本用戶端或者是自主接入,請參考開源MQTT用戶端參考,使用前請閱讀相關用戶端的說明,是否支援WebSocket方式。

  3. 連接配接說明。

    使用WebSocket方式進行連接配接,差別主要在MQTT連接配接URL的協定和端口号,MQTT連接配接參數和TCP直接連接配接方式完全相同,其中要注意securemode參數,使用wss方式連接配接時securemode=2,使用ws方式連接配接時securemode=3。

    • 接入域名:
      • 您購買的執行個體的接入域名,請在物聯網平台控制台執行個體管理頁面,單擊執行個體對應的檢視,進入執行個體詳情頁檢視。
      • 公共執行個體的接入域名:

        ${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com

        。 其中:
        • ${YourProductKey}:請替換為裝置所屬産品的的ProductKey。可從物聯網平台控制台裝置詳情頁擷取。
        • ${YourRegionId}:請參見地域和可用區替換為您的Region ID。
    • 端口:443。
    • 可變報頭(variable header):Keep Alive。

      Connect指令中需包含Keep Alive(保活時間)。保活心跳時間取值範圍為30至1200秒。如果心跳時間不在此區間内,物聯網平台會拒絕連接配接。建議取值300秒以上。如果網絡不穩定,将心跳時間設定高一些。

      裝置端在保活時間間隔内,至少需要發送一次封包,包括PING請求。

      如果物聯網平台在保活時間内無法收到任何封包,物聯網平台會斷開連接配接,裝置端需要進行重連。

    • MQTT的Connect封包參數如下:
      mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
      mqttUsername: deviceName+"&"+productKey
      mqttPassword: sign_hmac(deviceSecret,content)sign簽名需要把以下參數按字典序排序後,再根據signmethod加簽。
      content=送出給伺服器的參數(productKey,deviceName,timestamp,clientId), 按照字母順序排序, 然後将參數值依次拼接
                 
      其中,
      • clientId:表示用戶端ID,建議mac或sn,64字元内。
      • timestamp:表示目前時間毫秒值,可選。
      • mqttClientId:格式中

        ||

        内為擴充參數。
      • signmethod:表示簽名算法類型。
      • securemode:表示目前安全模式,可選值有2 (wss協定)和3(ws協定)。
    參考示例,如果預置前提如下:
    clientId = 12345,deviceName = device, productKey = pk, timestamp = 789,signmethod=hmacsha1,deviceSecret=secret
               
    • 使用ws方式
      • 連接配接域名
        ws://pk.iot-as-mqtt.cn-shanghai.aliyuncs.com:443
                   
      • 連接配接參數
        mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789|
        mqttUsername=device&pk
        mqttPasswrod=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString(); 
                   
    • 使用wss方式
      • 連接配接域名
        wss://pk.iot-as-mqtt.cn-shanghai.aliyuncs.com:443
                   
      • 連接配接參數
        mqttclientId=12345|securemode=2,signmethod=hmacsha1,timestamp=789|
        mqttUsername=device&pk
        mqttPasswrod=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString();
                   
    建議您使用裝置端SDK接入物聯網平台。如果您自行開發接入,可參考MQTT連接配接簽名示例。

繼續閱讀