我有一个在angularjs和node.js mqtt模块上运行的mqtt客户端。有一个简单的开关,只要交换机状态发生变化,它就会在mqtt代理上发布主题。
相关的html代码如下所示;
<div ng-controller="SwitchCtrl">
<md-switch ng-model="switch_status.sw1" aria-label="SwitchCtrl" ng-change="onChange(switch_status.sw1)">
Wireless Light Switch: {{ switch_status.sw1 }}
</md-switch>
</div>
这是angularjs控制器;
angular.module('myApp.controllers', [])
.controller('SwitchCtrl', ['$scope',
function ($scope) {
$scope.switch_status = {
sw1: true,
};
var mqtt_client = mqtt.connect('ws://127.0.0.1:3000');
mqtt_client.subscribe('hello/world');
mqtt_client.on('connect', function () {
console.log("MQTT connected");
});
mqtt_client.on("message", function(topic, payload) {
console.log([topic, payload].join(": "));
mqtt_client.end();
});
$scope.onChange = function (sw_state) {
if (sw_state === true) {
mqtt_client.publish('hello/world', 'switch on');
}
else if (sw_state === false) {
mqtt_client.publish('hello/world', 'switch off');
}
}
}])
;
我的问题是控制器代码只运行一次。我希望控制器中的这段代码能够永久运行,以便客户端知道在订阅主题上发布的新消息。
mqtt_client.on("message", function(topic, payload) {
console.log([topic, payload].join(": "));
mqtt_client.end();
});
如何让mqtt客户端一直监听而不是只听一次?
答案 0 :(得分:-1)
注释掉结束mqtt_client连接的行。那可行!感谢floribon的一位评论员,他首先在评论中提供了答案。
mqtt_client.on("message", function(topic, payload) {
console.log([topic, payload].join(": "));
//mqtt_client.end();
});