How does IoT platform realize 1 million/s message broadcasting?

IoT シナリオでは、デバイスメッセージの全量ブロードキャストが必要となるケースが多くあります。大量のオンラインデバイスにメッセージを瞬時にプッシュするにはどうすればよいでしょうか。

Alibaba Cloud IoT Enterprise IoT インスタンスは、開発者に PubBroadcast インターフェイスを提供しており、秒レベルで 100 万台のオンラインデバイスにメッセージを配信できるため、高い同時実行性が求められる場面でも安心してご利用いただけます。

4 台のデバイスを作成し、メッセージをブロードキャスト

コレクションスピーカーシナリオのメッセージブロードキャストを例に、全量デバイスブロードキャスト機能をご紹介します。

デバイスとブロードキャストメッセージ本文

全量デバイスブロードキャストインターフェイス PubBroadcast

デバイスが受信するメッセージの例:

トピック例:
/sys/g6palBDnzyT/dk004/broadcast/request/1386995865331441413

ペイロード例:
{
"volume": 80,
"mode": 4
}

フルブロードキャスト開発実践

デバイス側の開発

IoT Platform はデフォルトでフルブロードキャスト用のトピックを提供しており、デバイス側は事前サブスクリプションなしでクラウドからのブロードキャストメッセージを受信できます。

デバイス側アプリケーションコード (Node.js 例):
// node broadcast-device.js
const mqtt = require('aliyun-iot-mqtt');
//1. デバイス ID 3 要素セット + リージョン
const options = require("./iot-device-config.json");
//2. MQTT 接続を確立
const client = mqtt.getAliyunIotMqttClient(options);
//システムフルブロードキャストトピックプレフィックス
const allBroadcastTopic = `/sys/${options.productKey}/${options.deviceName}/broadcast/request`;
client. on('message', function(topic, message) {
//フルブロードキャストメッセージをフィルター
if (topic.indexOf(allBroadcastTopic) > -1) {
Console. log ("デバイスがフルブロードキャストメッセージを受信しました:")
console. log(" topic=" + topic)
console. log(" message=" + message)
}
})

iot-device-config.json デバイス設定パラメーター:

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

クラウドバックエンド側の開発

クラウド側の業務システムは、IoT Enterprise IoT インスタンスの PubBroadcast インターフェイスを呼び出してブロードキャストメッセージを送信し、すべてのオンラインデバイスに配信します。呼び出しコード例 (Node.js):

// node broadcast.js
const co = require('co');
const RPCClient = require('@alicloud/pop-core').RPCClient;
const options = {
AccessKey: "Your own accessKey",
AccessKeySecret: "Your own accessKeySecret"
};

//1. クライアントを作成

const 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 の操作です

const action = 'PubBroadcast';

//ブロードキャスト内容

const payload = {

volume: 80,

mode: 4

};

//完全なパラメータ params

const 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 Success=========>", JSON. stringify (response));

} catch (err) {

console. Log ("PubBroadcast failed========>", JSON. stringify (err));

}

});

フルブロードキャスト結合デバッグ

ビジネスサーバーの PubBroadcast API 呼び出しログ:

4 台のデバイス側で受信したブロードキャストメッセージのログ:

トピックには同じメッセージ ID が含まれていますが、deviceName は異なります。

Related Articles

Explore More Special Offers

  1. Short Message Service(SMS) & Mail Service

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.