全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云物联网套件

基于WebSocket连接

更新时间:2017-12-19 21:42:59

一、介绍

支持基于WebSocket的MQTT协议,首先使用WebSocket建立连接,然后在WebSocket通道上使用Mqtt协议进行通信,即Mqtt-over-WebSocket。

特别说明:目前仅华东2站点支持websocket接入

使用WebSocket方式主要有以下优势:

  • 使得基于浏览器的应用程序可以像普通设备一样,具备和服务端建立MQTT长连接的能力
  • WebSocket方式使用443端口,从而使得消息可以顺利穿过大多数防火墙

二、使用方式

1.证书准备

Websocket可以使用ws和wss两种方式,ws就是普通的WebSocket连接,wss就是增加了TLS加密。如果使用wss方式进行安全连接,需要使用和TLS直连一样的根证书

2.客户端选择

java版本可以直接使用官方客户端sdk,只需要替换连接url即可。其他语言版本客户端或者是自主接入,请参考开源MQTT客户端参考,使用前请阅读相关客户端的说明,看是否支持WebSocket方式。

3.连接说明

使用WebSocket方式进行连接,区别主要在于mqtt连接url的协议和端口号,mqtt连接参数和tcp直接连接方式完全相同,其中要注意securemode参数,使用wss方式连接时securemode=2,使用ws方式连接时securemode=3.

  1. 连接域名:
  2. 华东2节点:${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:443
  3. ${productKey}请替换为您的产品keymqttConnect报文参数如下:
  4. mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
  5. mqttUsername: deviceName+"&"+productKey
  6. mqttPassword: sign_hmac(deviceSecret,content)sign签名需要把以下参数按字典序排序后,再根据signmethod加签。
  7. content=提交给服务器的参数(productKey,deviceName,timestamp,clientId), 按照字母顺序排序, 然后将参数值依次拼接
  8. 其中clientId是客户端自表示id,建议macsn64字符内;timestamp当前时间毫秒值,可选;mqttClientId格式中||内为扩展参数,signmethod代表签名算法类型,securemode代表目前安全模式,可选值有2 wss协议)、3ws协议),参考以下示例:
4.举例
  1. 如果clientId = 12345deviceName = device productKey = pk timestamp = 789signmethod=hmacsha1deviceSecret=secret
  2. 一、使用ws方式
  3. 连接域名:ws://pk.iot-as-mqtt.cn-shanghai.aliyuncs.com:443
  4. 连接参数:
  5. mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789|
  6. mqttUsername=device&pk
  7. mqttPasswrod=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString();
  8. 二、使用wss方式
  9. 连接域名:wss://pk.iot-as-mqtt.cn-shanghai.aliyuncs.com:443
  10. 连接参数:
  11. mqttclientId=12345|securemode=2,signmethod=hmacsha1,timestamp=789|
  12. mqttUsername=device&pk
  13. mqttPasswrod=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString();
本文导读目录