让客户端一直监听,而不是只监听一次
Make client listen all the time instead of listen only once
我有一个运行在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客户端始终侦听,而不是只侦听一次?
注释掉结束mqtt_client连接的行。这会奏效的!其中一位评论者floribon首先在评论中给出了答案。
mqtt_client.on("message", function(topic, payload) {
console.log([topic, payload].join(": "));
//mqtt_client.end();
});
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript html每点击一次就会更改url
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- jQuery滚动功能只工作一次
- 刷新导致我的帖子“;张贴“;再一次
- 只为构造函数的所有实例触发一次事件侦听器
- .slideDown() 在特定高度后只听一次,听 .scrollTop
- 重置选择的一次表单的操作侦听器
- 尽管有多个事件侦听器,Javascript 函数只调用一次
- DIV侦听旋转一次,然后没有jQuery
- 有没有一种方法可以监听多个事件
- 侦听回车点击的事件只被调用一次
- 让客户端一直监听,而不是只监听一次
- 在没有jquery的情况下只执行一次事件侦听器函数
- 带有参数和innerHTML的事件侦听器只能工作一次
- Javascript监听第二次点击
- 是否有一种方法可以在web浏览器中一次删除所有事件侦听器
- 是否有一种方法来监听正在使用javascript发送到打印机的页面