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 は異なります。
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
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
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
