我使用Node.js从MQTT代理(with this)获取数据并存储在MongoDB数据库中。现在我想在Web应用程序(可能)中实时显示这些数据。 数据来自不同的物联网节点,因此每次节点发送数据时,我都会认为HTMl中的按钮变为绿色或闪烁。
我不是专家后端程序员,所以在复杂性方面,最好的方法是什么?有一些直观的库? API? Socket.io? Moongose?
答案 0 :(得分:1)
WebSocket类似于MQTT,但没有关于客户端或服务器如何相互通信的强调协议。
由于您已经在NodeJS中实现了MQTT,我建议使用以下模式来建立通信。
物联网 - >通过MQTT发送DATA - >服务器接收DATA - >服务器通过WebSocket发送DATA - >客户收到DATA。
我正在使用socket.io,这是一个流行的WebSocket库,用于演示。
第1步:安装socket.io
npm install socket.io
第2步:服务器端实现
var app = require('express')();
var http = require('http').Server(app);
var mqtt = require('mqtt'); // This is for demonstration only, use your existing mqtt library instead.
var client = mqtt.connect('mqtt://test.mosquitto.org');
var io = require('socket.io')(http);
io.on('connection', function(socket) { // Whenever a new client is connected, this event is triggered
console.log("[Live] A new client connected.", socket.id);
socket.on('disconnect', function(socket) {
console.log("[Live]", socket.id, "got disconnected.");
});
});
client.on('message', function (topic, message) {
io.emit('live', message.toString()); // io.emit(channel, message);
// Broadcasts message to all client instance's that are subscribed to 'live' channel.
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
第3步:客户端实施
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.2/socket.io.js"></script>
<script>
var socket = io('http://localhost:3000');
socket.on('live', function (data) { // This event is triggered when server publishes data to 'live' channel
console.log(data);
});
</script>
简单,不是吗。希望它有所帮助。
答案 1 :(得分:0)
解决方案1 您可以让您的前端订阅您的MQTT代理。潜在的问题是数据可能不会进入您的数据库,但它会显示在网页上。
解决方案2 您可以在后端和前端之间打开Web套接字或流,以便后端实时推送数据。