在浏览器中投票并从AJAX获取MQTT消息
问题描述:
初学者在这里。在浏览器中投票并从AJAX获取MQTT消息
好吧,我试图完成一个简单的数据流:
MQTT-数据源---> MQTT经纪人--->的NodeJS-MQTT客户端---> AJAX式的Web浏览器(轮询每3秒)
- 我想能够获取MQTT消息并将其显示在浏览器端的AJAX组件中。
- 其次,在
console.log(mqttMessage);
,我如何清除以前的消息?因为在控制台上我可以看到所有以前的数据以及新增的数据。
我在Express上使用mqtt.js作为我的nodejs mqtt支持。
//Server.js
var mqtt = require('mqtt');
...
...
var getData = function() {
mqttClient.subscribe(mqttTopic);
mqttClient.on('message', function(topic, message) {
mqttMessage = message.toString();
console.log(mqttMessage);
})
return mqttMessage;
}
app.get('/pollData', function(req, res) {
res.send(getData());
});
和一个简单的html页面上,我有:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
$(document).ready(
function() {
setInterval(function() {
$.get('/pollData', function(res) {
$('#data').text(res);
});
}, 3000);
}
);
</script>
答
这是一个非常糟糕的模式,你应该只使用MQTT泛美卫生组织JavaScript客户端直接从订阅主题网页。
但是,如果你真的想这样做,那么以下是正确的做法。
//Server.js
var mqtt = require('mqtt');
...
...
var mqttMessage;
mqttClient.subscribe(mqttTopic);
mqttClient.on('message', function(topic, message) {
mqttMessage = message.toString();
console.log(mqttMessage);
})
app.get('/pollData', function(req, res) {
if (mqttMessage) {
res.send(mqttMessage);
} else {
res.status(404).send();
}
});
这是因为你不从MQTT主题读取的值,你必须要等到出头是在该主题的发布,则代理将其转发给所有用户。因此,在上面的代码中设置了连接,订阅,然后当发布消息时,它将存储在mqttMessage
变量中,如果未定义,则可以由REST终点返回。
任何使用AJAX轮询的理由,而不是仅仅使用MQTT来通过Websockets将MQTT消息直接传递给页面? – hardillb
@hardillb我认为这可能是灵活的,让服务器先处理所有MQTT消息,并以任何格式将数据喷出...作为AJAX返回,或数据库查询或JSON响应... – bshakya
这不会使感。如果你只是传递消息而没有任何好处,这会增加服务器的负载。 – hardillb