IoT Platform は MQTT over WebSocket をサポートしています。WebSocket 接続を確立した後、このチャネルを介して MQTT プロトコルを使用して通信できます。
メリット
WebSocket には以下のメリットがあります。
-
ブラウザベースのアプリケーションが、通常のデバイスと同様に、サーバーへの永続的な MQTT 接続を確立できます。
-
WebSocket はポート 443 を使用するため、ほとんどのファイアウォールを通過できます。
手順
-
証明書を準備します。
WebSocket は、ws (暗号化なし) と wss (TLS 暗号化) の 2 つのプロトコルをサポートしています。wss 接続の場合は、直接 TLS 接続と同じルート証明書を使用してください。
-
クライアントを選択します。
ApsaraMQ for MQTT クライアントを使用して、接続 URL を置き換えることができます。その他の言語については、オープンソース MQTT クライアントから選択してください。お使いのクライアントが WebSocket をサポートしていることを確認してください。
-
IoT Platform に接続します。
WebSocket MQTT 接続 URL は、直接 TCP 接続とは異なるプロトコルとポートを使用します。その他の MQTT パラメータは同じです。wss 接続の場合は
securemode=2を、ws 接続の場合はsecuremode=3を設定してください。-
エンドポイント:
wss://${MQTT_Endpoint}またはws://${MQTT_Endpoint}。パブリックインスタンスおよびエンタープライズインスタンスの MQTT エンドポイントについては、「インスタンスエンドポイント情報 (エンドポイント) の表示と設定」をご参照ください。 -
ポート: 443。
-
可変ヘッダー: Keep Alive。
Connect メッセージには Keep Alive を含める必要があります。これは、キープアライブ間隔を秒単位で指定します。有効な範囲: 30 ~ 1200。IoT Platform は、この範囲外の接続を拒否します。間隔は 300 秒以上に設定してください。ネットワークが不安定な場合は、より長い間隔を使用してください。
クライアントは、各キープアライブ間隔内に、PING リクエストなどの少なくとも 1 つのメッセージを送信する必要があります。
キープアライブ間隔内にクライアントからメッセージを受信しない場合、IoT Platform はクライアントを切断します。その後、クライアントは再接続する必要があります。
-
MQTT Connect メッセージパラメータ:
mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|" mqttUsername: deviceName+"&"+productKey mqttPassword: sign_hmac(deviceSecret,content)各パラメータの説明:
- mqttClientId:拡張パラメーターは縦棒(
| |)の間に配置されます。 - clientId:クライアントの ID。ビジネス要件に基づいてクライアント ID を指定できます。クライアント ID は 64 文字を超えることはできません。デバイスの MAC アドレスまたはシリアル番号(SN)をクライアント ID として使用することをお勧めします。
-
securemode : セキュリティモード。有効な値は 2 (wss プロトコルの場合) と 3 (ws プロトコルの場合) です。
- signmethod:署名アルゴリズム。有効な値:hmacmd5、hmacsha1、hmacsha256、sha256。デフォルト値:hmacmd5。
- timestamp:現在の時刻(ミリ秒単位)。このパラメーターはオプションです。
- mqttPassword:パスワード。計算方法:サーバーに送信されるパラメーターをアルファベット順にソートし、指定された署名アルゴリズムに基づいてパラメーターを暗号化します。署名計算の例の詳細については、「MQTT 接続の署名を作成する例」をご参照ください。
- content:サーバーに送信されるパラメーターで構成される連結文字列。これらのパラメーターには、productKey、deviceName、timestamp、clientId が含まれます。パラメーターはアルファベット順にソートされ、デリミタなしで連結されます。重要 productKey と deviceName は必須です。timestamp と clientId はオプションです。timestamp または clientId パラメーターを設定する場合、パラメーター値は mqttClientId パラメーターに指定された値と同じである必要があります。
- mqttClientId:拡張パラメーターは縦棒(
デバイス側 SDK を使用して IoT Platform に接続してください。カスタム統合の場合、MQTT 接続署名の例に実装の詳細が記載されています。
-