IoT Platform admite MQTT sobre WebSocket. Puede establecer una conexión WebSocket y utilizar el protocolo MQTT para comunicarse a través de este canal.
Beneficios
WebSocket ofrece los siguientes beneficios:
Las aplicaciones basadas en navegador pueden establecer conexiones MQTT persistentes con el servidor, de forma similar a los dispositivos convencionales.
WebSocket utiliza el puerto 443, lo que permite atravesar la mayoría de los firewalls.
Procedimiento
-
Prepare un certificado.
WebSocket admite dos protocolos: ws (sin cifrado) y wss (cifrado con TLS). Para las conexiones wss, utilice el mismo certificado raíz que para las conexiones TLS directas.
-
Seleccione un cliente.
Puede utilizar el cliente de ApsaraMQ for MQTT y reemplazar la URL de conexión. Para otros lenguajes, elija entre los clientes MQTT de código abierto. Compruebe que su cliente admita WebSocket.
-
Conéctese a IoT Platform.
La URL de conexión MQTT por WebSocket utiliza un protocolo y un puerto distintos a los de una conexión TCP directa. Los demás parámetros de MQTT permanecen igual. Establezca
securemode=2para conexiones wss ysecuremode=3para conexiones ws.Endpoint:
wss://${MQTT_Endpoint}ows://${MQTT_Endpoint}. Los endpoints MQTT para instancias públicas y Enterprise se enumeran en View and configure instance endpoint information (Endpoint).Puerto: 443.
-
Encabezado variable: Keep Alive.
El mensaje Connect debe incluir Keep Alive, que especifica el intervalo de keepalive en segundos. Rango válido: de 30 a 1200. IoT Platform rechaza las conexiones fuera de este rango. Configure el intervalo en 300 segundos o más. Utilice un intervalo mayor para redes inestables.
El cliente debe enviar como mínimo un mensaje, como una solicitud PING, dentro de cada intervalo de keepalive.
Si IoT Platform no recibe mensajes del cliente durante un intervalo de keepalive, desconecta al cliente. En ese caso, el cliente debe volver a conectarse.
-
Parámetros del mensaje Connect de MQTT:
mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|" mqttUsername: deviceName+"&"+productKey mqttPassword: sign_hmac(deviceSecret,content)Donde:
mqttClientId: Los parámetros extendidos se colocan entre barras verticales (
| |).clientId: El ID del cliente. Puede especificar un ID de cliente según sus requisitos empresariales. El ID del cliente no puede superar los 64 caracteres de longitud. Se recomienda utilizar la dirección MAC o el número de serie (SN) del dispositivo como ID del cliente.
securemode: El modo de seguridad. Los valores válidos son 2 (para el protocolo wss) y 3 (para el protocolo ws).
signmethod: El algoritmo de firma. Valores válidos: hmacmd5, hmacsha1, hmacsha256 y sha256. Valor predeterminado: hmacmd5.
timestamp: La hora actual, en milisegundos. Este parámetro es opcional.
mqttPassword: La contraseña. Método de cálculo: Ordene alfabéticamente los parámetros que se envían al servidor y cífrelos con el algoritmo de firma especificado. Para obtener más información sobre el ejemplo de cálculo de firma, consulte Examples of creating signatures for MQTT connections.
-
content: Una cadena concatenada formada por los parámetros que se envían al servidor. Estos parámetros incluyen productKey, deviceName, timestamp y clientId. Los parámetros se ordenan alfabéticamente y se concatenan sin delimitadores.
ImportanteproductKey
y
deviceName
son obligatorios.
timestamp
y
clientId
son opcionales. Si configura el parámetro
timestamp
o
clientId
, su valor debe coincidir con el valor especificado en el parámetro
mqttClientId
.
Utilice un SDK del lado del dispositivo para conectarse a IoT Platform. Para integraciones personalizadas, MQTT connection signature example proporciona los detalles de implementación.