MQTT-WebSocket连接通信

MQTT-WebSocket连接通信

更新时间:2020-10-21 15:13:47

编辑我的收藏

本页目录

物联网平台支持基于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连接签名示例

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue-mqtt-websocket-example是一个基于Vue.js框架的示例应用程序,用于演示如何在前端使用MQTTWebSocket实现实时通信功能。 这个示例应用程序使用了Vue.js的单文件组件结构,其中包含了主组件和子组件。主组件负责连接MQTT代理服务器并监听/subscribe主题,同时也负责将接收到的消息传递给子组件以进行显示。子组件用于展示接收到的消息列表并提供发布消息的功能。 在这个示例应用程序中,使用的是MQTT over WebSocket,它通过WebSocket协议在浏览器和MQTT代理服务器之间建立了一条双向通信的通道。这种方式可以使浏览器直接与MQTT代理服务器通信,而无需借助中间层。 示例应用程序中的主要功能如下: 1. 连接MQTT代理服务器:通过指定服务器的地址、端口和协议等信息,与MQTT代理服务器建立连接。 2. 订阅主题:指定要订阅的主题,然后监听该主题下的消息。 3. 接收消息:当有新的消息到达时,将消息添加到消息列表中,并通过子组件的props属性将消息传递给子组件进行展示。 4. 发布消息:在子组件中,可以输入要发布的消息内容,并通过调用MQTT客户端的publish方法将消息发布到指定的主题。 总之,vue-mqtt-websocket-example提供了一个简单易用的示例,演示了如何在Vue.js应用程序中使用MQTTWebSocket实现实时通信功能。你可以通过参考这个示例来了解如何在自己的Vue.js项目中集成和使用MQTTWebSocket
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值