写点什么

IoT 物联网平台如何实现 100 万 / 秒 消息广播?——实践类

作者:阿里云AIoT
  • 2023-02-23
    浙江
  • 本文字数:1690 字

    阅读完需:约 6 分钟

传送门:5个视频讲解,30个场景案例汇总


image.png


在物联网场景中,常常会有全量设备消息广播诉求。如何把消息瞬间推送到海量在线设备上?


阿里云 IoT 企业物联网实例为开发者提供了 PubBroadcast 接口,可以在秒级触达 100 万在线设备,使得企业面在面对高并发需求时无后顾之忧。


创建 4 个设备和广播内容

我们以收款音箱场景消息广播为例,演示全量设备广播功能。

设备和广播消息体


image.png


全量设备广播接口 PubBroadcast


image.png


设备端收到的消息报文示例:

Topic示例:/sys/g6palBDnzyT/dk004/broadcast/request/1386995865331441413
Payload示例:{    "volume": 80,    "mode": 4}
复制代码


全量广播开发实战

设备端开发

IoT 物联网平台默认提供全量广播 Topic,设备端无需预先订阅,即可接收到云端的广播消息。

设备端应用程序代码(Node.js 示例):

// node broadcast-device.jsconst mqtt = require('aliyun-iot-mqtt');
//1.设备身份三元组+区域const options = require("./iot-device-config.json");
// 2. 建立MQTT连接const client = mqtt.getAliyunIotMqttClient(options);
//系统全量广播 Topic 前缀const allBroadcastTopic = `/sys/${options.productKey}/${options.deviceName}/broadcast/request`;
client.on('message', function(topic, message) {    //过滤全量广播消息    if (topic.indexOf(allBroadcastTopic) > -1) {
        console.log("设备收到全量广播消息:")        console.log("\ttopic=" + topic)        console.log("\tmessage=" + message)    }})
复制代码


iot-device-config.json 设备配置参数:

{    productKey: "g6palBDnzyT",    deviceName: "dk004",    deviceSecret: "424ed56661980c604255507d1b81464e",    host: "iot-060a08kg.mqtt.iothub.aliyuncs.com"}
复制代码


云端后台开发

云端业务系统调用 IoT 物联网实例的 PubBroadcast 接口,即可发送广播消息,触达全量在线设备。调用代码示例(Node.js):

// node broadcast.jsconst co = require('co');
const RPCClient = require('@alicloud/pop-core').RPCClient;
const options = {    accessKey: "自己的accessKey",    accessKeySecret: "自己的accessKeySecret"};
//1.创建clientconst client = new RPCClient({    accessKeyId: options.accessKey,    secretAccessKey: options.accessKeySecret,    endpoint: 'https://iot.cn-shanghai.aliyuncs.com',    apiVersion: '2018-01-20'});
// 2.构造iot API// 这里是POP API的Actionconst action = 'PubBroadcast';// 广播内容const payload = {    volume: 80,    mode: 4};// 完整入参 paramsconst params = {    ProductKey: "g6palBDnzyT",    IotInstanceId: "iot-064a04kg",    MessageContent: new Buffer(JSON.stringify(payload)).toString("base64")};
co(function*() {    //3.发起全量广播PubBroadcast API调用    try {        const response = yield client.request('PubBroadcast', params);
        console.log("PubBroadcast 成功 =====>", JSON.stringify(response));    } catch (err) {        console.log("PubBroadcast 失败 =====>", JSON.stringify(err));    }});
复制代码


全量广播联调

业务服务器调用 PubBroadcast API 日志:

image.png


4 个设备端收到的广播消息日志:

Topic 的消息 id 相同,deviceName 不同


image.png


往期推荐


1、39张传感器工作原理GIF图汇总

2、智能手持测温枪开发实践

3、JMeter压测MQTT服务性能实战

4、IoT物联网平台日志服务详解

5、自建MQTT集群迁移阿里云IoT实践

6、工业Modbus电力104规约接入IoT平台

7、设备免烧录三元组,即时注册解决方案

8、IoT+TSDB+Quick BI 搭建楼宇环境监控

9、JS全栈开发,构建智能家居小程序


物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn


阿里云物联网平台客户交流群

用户头像

阿里云AIoT

关注

物联网内容搬运者 2022-04-22 加入

还未添加个人简介

评论

发布
暂无评论
IoT 物联网平台如何实现 100万/秒 消息广播?——实践类_小程序_阿里云AIoT_InfoQ写作社区