设备接入 IoTDA
设备接入 IoTDA
- 最新动态
- 功能总览
- 服务公告
- 计费说明
- 产品介绍
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
-
API参考
- 应用侧API参考
- 设备侧MQTT/MQTTS接口参考
- 设备侧HTTPS接口参考
- 设备侧LwM2M接口参考
- 安全隧道WebSocket接口参考
- 模组AT指令参考
- 修订记录
- SDK参考
- 场景代码示例
-
常见问题
- 热门问题
-
方案咨询
- 连接IoT平台的业务场景有哪些?
- 设备管理服务和设备接入服务合一后的差异点是什么?
- IAM子用户或子项目是否可以开通物联网平台服务?
- 物联网平台支持在华为云的哪些区域开通?
- 华为是否提供模组/硬件终端/应用软件等?
- IAM用户访问API提示没有权限?(是否区分版本?)
- 创建规则或者设置资源文件存储时候提示赋予Security Administrator权限
- 物联网平台设置默认资源空间的规则是什么?
- 设备接入服务如何获取设备数据?
- 物联网平台的资源空间和设备可以无限创建吗?
- 物联网平台支持批量注册设备吗?
- 物联网平台对应用侧和设备侧在开发或使用时有限制吗?
- 物联网平台支持的DTLS加密算法有哪些?
- 物联网平台支持二进制大小端模式切换吗?
- 什么是NB-IoT?
- 物联网平台支持的硬件架构和使用的相关组件有哪些?
- 如何获取平台接入地址?
- 设备集成相关问题
- 设备侧SDK相关问题
- 设备发放相关问题
- LWM2M/CoAP接入相关问题
- MQTT接入相关问题
- 泛协议接入相关问题
- 物模型相关问题
- 消息通信相关问题
- 订阅推送相关问题
- 编解码插件相关问题
- OTA升级相关问题
- 应用集成相关问题
- 实例管理相关问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
Node.js Demo使用说明
本文以Node.js语言为例,介绍应用通过MQTTS协议接入平台,接收服务端订阅消息的示例。
前提条件
熟悉Node.js语言开发环境配置,熟悉Node.js语言基本语法。
添加依赖
本示例使用的Node.js语言的Mqtt依赖为mqtt(本示例使用版本为4.0.0),可以通过以下命令下载依赖。
npm install mqtt@4.0.0
代码示例
const mqtt = require('mqtt'); // 订阅topic名称 var topic = "your mqtt topic"; // 接入凭证键值,可通过环境变量预置 var accessKey = process.env.MQTT_ACCESS_KEY; // 接入凭证密钥,可通过环境变量预置 var accessCode = process.env.MQTT_ACCESS_CODE; // mqtt接入地址 var mqttHost = "your mqtt host"; // mqtt接入端口 var mqttPort = 8883; // 实例Id var instanceId = "your instanceId"; // mqtt client id var clientId = "your clientId"; // mqtt 客户端 var client = null; connectWithRetry(); async function connectWithRetry() { // 退避重试,从1s依次x2,直到20s。 var duration = 1000; var maxDuration = 20000; var success = connect(topic); var times = 0; while (!success) { await sleep(duration) if (duration < maxDuration) { duration *= 2 } times++ console.log('connect mqtt broker retry. times: ' + times) if (client == null) { connect(topic) continue } client.end(true, function() { connect(topic) }); } } function sleep(ms) { return new Promise(resolve => setTimeout(() => resolve(), ms)) } function connect(topic) { try { client = mqtt.connect(getClientOptions()) if (client == null) { return false } client.on('connect', connectCallBack) client.subscribe(topic, subscribeCallBack) client.on('message', messageCallBack) client.on('error', clientErrorCallBack) client.on('close', closeCallBack) return true } catch (error) { console.log('connect to mqtt broker failed. err ' + error) } return false } function getClientOptions() { var timestamp = Math.round(new Date); const username = 'accessKey=' + accessKey + '|timestamp=' + timestamp + '|instanceId=' + instanceId; var options = { host: mqttHost, port: mqttPort, connectTimeout: 4000, clientId: clientId, protocol: 'mqtts', keepalive: 120, username: username, password: accessCode, rejectUnauthorized: false, secureProtocol: 'TLSv1_2_method' }; return options; }; function connectCallBack() { console.log('connect mqtt server success'); }; function subscribeCallBack(err, granted) { if (err != null || granted[0].qos === 128) { console.log('subscribe topic failed. granted: ' + granted[0].qos) return } console.log('subscribe topic success. granted: ' + granted[0].qos); }; function clientErrorCallBack(err) { console.log('mqtt client error ' + err); }; function messageCallBack(topic, message) { console.log('receive message ' + message); }; function closeCallBack() { console.log('Disconnected from mqtt broker') client.end(true, function() { console.log('close connection'); connectWithRetry(); }); }
成功示例
接入成功后,客户端打印信息如下:
图1 node.js mqtt客户端接入成功示例

父主题: 使用MQTT转发