MQTT-WebSocket连接通信

更新时间:2020-09-08 16:57:21

编辑我的收藏

本页目录

  • 背景信息
  • 操作步骤

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

阿里云物联网平台 > 设备接入 > 使用开放协议自主接入 > MQTT协议接入 >相关推荐

  1. EMW3080 STC15轻松实现设备上云3(阿里云物联网平台、智能生活开放平台)

    警告:本系列教程针对ILOP.A221固件开发,如使用其他ILOP固件,请自行修改配网部分.数据上报部分及解析服务器下发信息部分! 从本节开始我们就开始写程序用STC15单片机了实现设备上云啦!在此之 ...

  2. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

  3. 爬取阿里云物联网平台设备的物模型数据

    背景说明 按项目经理的要求,需要导出阿里云物联网平台上所有设备的物模型数据到Excel上,方便后台导入.给客户演示和备份.但是,阿里云物联网平台没有这个功能,手动一个个处理不现实,因此只能写一个爬虫爬 ...

  4. 阿里云物联网平台设备之间通讯、数据转发

    阿里云物联网平台设备之间通讯.数据转发 阿里云物联网平台设备之间通讯.数据转发 准备工作 创建云产品流转规则 调试 阿里云物联网平台设备之间通讯.数据转发 本文演示使用阿里云物联网平台两设备间的通讯. ...

  5. 阿里云物联网平台设备模拟器

    在使用阿里云物联网平台过程中,如果开始调试没有实际的物理设备,可以考虑在阿里云物联网平台使用官方自带的模拟器进行调试.不过也可以通过叶帆科技开发的阿里云物联网平台设备模拟器AliIoTSimulato ...

  6. EMW3080+STC15轻松实现设备上云1(阿里云物联网平台、智能生活开放平台)

    警告:本系列教程针对ILOP.A221固件开发,如使用其他ILOP固件,请自行修改配网部分.数据上报部分及解析服务器下发信息部分! 本系列教程接入  阿里云物联网平台 / 智能生活开放平台 / 阿里智 ...

  7. 实现阿里云物联网平台设备信息到微信小程序分享过程

    简要说明: 实现微信小程序连接阿里云物联网平台并且显示阿里云设备信息等,设备端采用模拟设备进行数据上传,并且利用规则引擎和自定义的Topic进行信息的接受和发送. 目前效果图 步骤: 1.注册阿里云物 ...

  8. ESP8266 基于AT指令集连接阿里云物联网平台设备

    总结一下之前学习的内容.想通过ESP8266连接上阿里云物联网平台上创建的设备. 用ESP8266连接阿里云,本质上就是开启ESP8266的透传模式,发送MQTT报文.所谓MQTT报文,就是符合MQT ...

  9. EMW3080+STC15轻松实现设备上云2(阿里云物联网平台、智能生活开放平台)

    警告:本系列教程针对ILOP.A221固件开发,如使用其他ILOP固件,请自行修改配网部分.数据上报部分及解析服务器下发信息部分! 1.登录智能生活开放平台 2.创建项目 3.新建产品 4.点击刚刚创 ...

  10. 树莓派连接阿里云物联网平台设备

    文章知识大多来源于总结https://www.bilibili.com/video/BV1W7411t7Tv?t=19视频内容,非作者自创 ESP8266坏了,手上有个同学的树莓派,也想上个云.折腾一 ...

最新文章

  1. 数据结构和算法:(1)数据结构的基本知识
  2. 有人能用外行人解释什么是JSONP吗? [重复]
  3. vCenter Server Appliance 5.5忘记root密码
  4. ABAP股票查看代码
  5. Alibaba Cloud Linux 技术图谱首发,分享学习感言得大奖!
  6. Execute SQL Task 参数和变量的映射
  7. java web权限设计_java web简单权限管理设计
  8. 【转】XSD (xml Schema Definition)
  9. Spring Aop pointcut expression表达式解析
  10. AD排错最佳实践—— 技巧与捷径-笔记
  11. Raki的统计学习方法笔记0xB(11)章:条件随机场
  12. xml.html一键解密工具,华为配置加解密工具
  13. 关于JFreeChart中BarChart柱体宽度设置的问题纪要
  14. 基于matlab算法的可靠度分析,参考基于matlab算法的可靠度分析
  15. PHP MYSQLi 过程式准备好语句
  16. 搭建onedrive个人网盘(详细步骤)
  17. 千呼万唤始出来,犹抱琵琶半遮面-go语言初识
  18. Python绘图:turtle库基础语法介绍
  19. excel-counta
  20. 实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证

热门文章

  1. linux pcie组raid_大概是市面上带金属 PCIE 装甲和背板中最便宜的一款主板。华擎 Z390 Phantom Gaming X 开箱评测...
  2. java 调用c++ jni_Java中使用JNI调用C++
  3. 两种方法实现图片懒加载
  4. xml文件转为ftl_idea freemarker热部署,自动加载修改的ftl页面
  5. 从51能不学编程只学c语言,51单片机C语言学习笔记8:单片机C51编程规范
  6. 2021高考文科成绩怎样查询,2021年本科分数线是多少?如何查询分数
  7. linux 按列提取文件名,Linux展示按文件名降序文件
  8. ubuntu设置打开主目录(home文件夹)的快捷键
  9. android 机顶盒 页面布局,Android机顶盒用户DIY手册.doc
  10. 文件fluent_Win10 中解决FLUENT中UDF 的方法