2017-02-02 4 views
-1

Ich benutze Node.js, um Daten von einem MQTT-Broker (with this) zu erhalten und in einer MongoDB-Datenbank zu speichern. Jetzt möchte ich diese Daten in einer Web-App (möglicherweise) in Echtzeit visualisieren. Die Daten stammen von verschiedenen Knoten des Internets der Dinge, also würde jedes Mal, wenn ein Knoten Daten sendet, eine Schaltfläche in HTMl grün oder blinkend werden.Wie verbinden Knoten und MongoDB mit Web-App

Ich bin kein Experte Backend-Programmierer, also was könnte der beste Weg sein, in Bezug auf die Komplexität? Es gibt einige intuitive Bibliotheken? API? Socket.io? Moongose?

+2

Eine Möglichkeit besteht darin, WebSockets für die Verbindung von NodeJS & HTML (Frontend) in Echtzeit zu verwenden. Das ist immer dann der Fall, wenn Sie Daten in Node erhalten, diese an WebSockets übergeben und die Daten im Frontend entsprechend behandeln. –

+0

WebSocket-Code ist serverseitig oder clientseitig (Browser) implementiert? – FabioDev

+0

Beide. Der Client muss eine Verbindung mit dem Server herstellen. Sobald eine offene Verbindung besteht, kann der Server Daten an den Client senden, ohne neue Anforderungen oder Verbindungen zu erstellen. –

Antwort

0

WebSocket ist ähnlich wie MQTT, aber ohne hervorgehobenes Protokoll darüber, wie ein Client oder Server miteinander kommunizieren soll.

Da Sie bereits MQTT in NodeJS implementiert haben, würde ich empfehlen, das folgende Muster zu verwenden, um die Kommunikation herzustellen.

IOT -> sendet Daten über MQTT -> Server empfängt DATEN -> Server sendet DATEN über WebSocket -> Client empfängt DATEN.

Ich benutze socket.io, eine populäre WebSocket-Bibliothek zum Zwecke der Demonstration. 1

STEP: Installation Socket.io

npm installieren Socket.io

SCHRITT 2: Serverseitige Implementierung

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'); 
}); 

Schritt 3: Clientseitige Implementierung

<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> 

Einfach, nicht wahr? Ich hoffe es hilft.

0

Lösung 1 Sie könnten Ihr Frontend Ihren MQTT-Broker abonnieren lassen. Das potentielle Problem besteht darin, dass die Daten möglicherweise nicht in Ihre DB gelangen, sondern auf der Webseite angezeigt werden.

Lösung 2 Sie könnten einen Web-Socket oder Stream zwischen Ihrem Backend und Frontend öffnen, so dass das Backend Daten in Echtzeit pushen wird.

Verwandte Themen