123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /**
- * JetLinks mqtt 官方协议模拟器
- * benchmark mqtt --host=127.0.0.1 --port=8801 --script=mqtt/benchmark.js report=true reportLimit=100 interval=1000
- */
- //绑定内置参数,否则匿名函数无法使用。
- var $benchmark = benchmark;
- //在jetlinks平台的产品ID
- var productId = args.getOrDefault("productId", "simulator");
- var deviceIdPrefix = args.getOrDefault("deviceIdPrefix", "mqtt-test-");
- var $enableReport = "true" === args.getOrDefault("report", "true");
- var $reportLimit = parseInt(args.getOrDefault("reportLimit", "100"));
- var $reportInterval = parseInt(args.getOrDefault("interval", "1000"));
- //创建连接之前动态生成用户名密码
- function beforeConnect(index, options) {
- var clientId = deviceIdPrefix + index;
- var secureId = "test";
- var secureKey = "test";
- var username = secureId + "|" + now();
- var password = md5(username + "|" + secureKey);
- options.setUsername(username);
- options.setPassword(password);
- options.setClientId(clientId);
- }
- //全部连接完成后执行
- function onComplete() {
- if (!$enableReport) {
- return
- }
- //定时执行1s
- $benchmark
- .interval(function () {
- //随机获取1000个连接然后上报属性数据
- $benchmark.print("批量上报属性..");
- return $benchmark
- .randomConnectionAsync($reportLimit, reportProperties);
- }, $reportInterval)
- }
- function reportProperties(client) {
- //创建随机数据
- var data = {};
- // $benchmark.print("上报[" + client.getId() + "]属性");
- for (let i = 0; i < 10; i++) {
- data["temp" + i] = randomFloat(10, 30);
- }
- var msg = {
- "properties": data
- }
- //推送mqtt
- return client.publishAsync(createTopic(client, "/properties/read/report"), 0, $benchmark.toJson(msg));
- }
- //单个连接创建成功时执行
- function onConnected(client) {
- //订阅读取属性
- client
- .subscribe(createTopic(client, "/properties/read"),
- 0,
- function (msg) {
- handleReadProperty(client, msg.payload().toJsonObject())
- });
- }
- //根据jetlinks官方协议topic规则创建topic
- function createTopic(client, topic) {
- return "/" + productId + "/" + client.getId() + topic;
- }
- function handleReadProperty(client, msg) {
- var messageId = msg.getString("messageId");
- var properties = msg.getJsonArray("properties");
- $benchmark.print("读取[" + client.getId() + "]属性:" + msg);
- //创建随机数据
- var data = {};
- properties.forEach(function (property) {
- //随机数据
- data[property] = randomFloat(10, 30);
- });
- //构造回复数据
- var reply = {
- "messageId": messageId,
- "properties": data
- }
- //推送mqtt
- doPublish(client, "/properties/read/reply", reply)
- }
- function doPublish(client, topic, payload) {
- //推送mqtt
- client.publish(createTopic(client, topic), 0, $benchmark.toJson(payload));
- }
- //重点! 绑定函数到benchmark
- benchmark
- .beforeConnect(beforeConnect)
- .onConnected(onConnected)
- .onComplete(onComplete);
|