物聯網平臺支持基于WebSocket的MQTT協議。您可以首先使用WebSocket建立連接,然后在WebSocket通道上使用MQTT協議進行通信,即MQTT over WebSocket。
背景信息
使用WebSocket方式主要有以下優勢:- 使基于瀏覽器的應用程序可以像普通設備一樣,具備與服務端建立MQTT長連接的能力。
- WebSocket方式使用443端口,消息可以順利穿過大多數防火墻。
操作步驟
- 準備證書。
WebSocket可以使用ws和wss兩種方式,ws是普通的WebSocket連接,wss是增加了TLS加密。如果使用wss方式進行安全連接,需要使用和TLS直連相同的根證書。
- 選擇客戶端。
- 連接說明。
使用WebSocket方式進行連接,區別主要在MQTT連接URL的協議和端口號,MQTT連接參數和TCP直接連接方式完全相同,其中要注意securemode參數,使用wss方式連接時,配置
securemode=2
,使用ws方式連接時,配置securemode=3
。- 接入域名:格式為
wss://${MQTT接入地址}
或ws://${MQTT接入地址}
。公共實例和企業版實例中設備的MQTT接入地址信息,請參見查看實例終端節點。 - 端口: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)
其中:- mqttClientId:格式中
| |
內為擴展參數。 - clientId:表示客戶端ID,可自定義,長度不可超過64個字符。建議使用設備的MAC地址或SN碼,方便您識別區分不同的客戶端。
- securemode:表示目前安全模式,可選值有2(wss協議)和3(ws協議)。
- signmethod:表示簽名算法類型。支持hmacmd5,hmacsha1和hmacsha256,默認為hmacmd5。
- timestamp:表示當前時間毫秒值,可以不傳遞。
- mqttPassword:sign簽名需把提交給服務器的參數按字典排序后,根據signmethod加簽。簽名計算示例,請參見MQTT連接簽名示例。
- content的值為提交給服務器的參數(productKey、deviceName、timestamp和clientId),按照參數名稱首字母字典排序, 然后將參數值依次拼接。重要 此處productKey和deviceName為必填參數,timestamp和clientId為可選參數。若傳入timestamp或clientId,必須與mqttClientId中的設置相同。
- mqttClientId:格式中
建議您使用設備端SDK接入物聯網平臺。如果您自行開發接入,請參見MQTT連接簽名示例。
- 接入域名:格式為