2017-02-02 6 views
-1

Я использую Node.js для получения данных от брокера MQTT (with this) и храните его в базе данных MongoDB. Теперь я хочу визуализировать эти данные в веб-приложении (возможно) в режиме реального времени. Данные поступают из разных узлов Internet Of Things, поэтому каждый раз, когда узел отправляет данные, я хотел бы, чтобы кнопка в HTMl стала зеленой или мигающей.Как подключить узел и MongoDB с веб-приложением

Я не специалист по программированию на бэкэнд, так что может быть лучшим способом с точки зрения сложности? Есть несколько интуитивных библиотек? API? Socket.io? Moongose?

+2

Одним из возможных способов является использование WebSockets для подключения NodeJS & HTML (front-end) в режиме реального времени. Это когда вы получаете данные в узле, передаете его в websockets и в интерфейсе обрабатываете данные соответствующим образом. –

+0

Код WebSocket реализован на стороне сервера или на стороне клиента (браузер)? – FabioDev

+0

Оба. Клиент должен открыть соединение с сервером. Когда есть открытое соединение, сервер может передавать данные клиенту без каких-либо новых запросов или подключений. –

ответ

0

WebSocket похож на MQTT, но без особого протокола о том, как клиент или сервер должны взаимодействовать друг с другом.

Поскольку вы уже реализовали MQTT в NodeJS, я бы рекомендовал использовать следующий шаблон для установления связи.

IOT -> отправляет DATA через MQTT -> Сервер получает DATA -> Сервер отправляет DATA через WebSocket -> Клиент получает DATA.

Я использую socket.io, популярную библиотеку WebSocket для демонстрации.

ШАГ 1: Установка Socket.io

НПМ установить 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> 

Простой, не так ли. Надеюсь, поможет.

0

Решение 1 Вы можете позволить своему партнеру подписаться на ваш брокер MQTT. Потенциальная проблема заключается в том, что данные не могут попасть в вашу БД, но она появляется на веб-странице.

Решение 2 Вы можете открыть веб-сокет или поток между вашим сервером и интерфейсом, чтобы бэкэнд будет передавать данные в реальном времени.