Я программирую приложение реального времени, используя веб-сокеты, но когда я отправляю сообщения с сервера (node.js):
//Mostramos el 'dashboard' de dispositivo
const getSingleDevice = async (req, res) => {
/*Realizamos una busqueda dentro de la base de datos*/
const device = await Device.findById(req.params.id);
console.log('device: ', device)
//Importamos la conexion del servidor de Sockets
const connectionSocket = require('../../lib/socketManager').connection();
//Importamos la conexion del servidor mqtt
const connectionMqtt = require('../../lib/mqttManager').connection();
//Creamos una funcion que se ejecutara cada vez que recibimos un dato por mqtt
//En este caso enviamos por websockets
let sendToSocket = async (d) => {
//Conversion de los datos
let data = JSON.parse(d.replace(/'/g, "\""));
connectionSocket.sendEvent('temperature', data.temperature);
connectionSocket.sendEvent('humidity', data.humidity);
//console.log('Enviando al Socket: ',data.token);
//console.log('Enviando al Socket: ',data.temperature);
//console.log('Enviando al Socket: ',data.humidity);
//Verificamos el 'token'
//Notese que dentro de 'decoded' se encuentra el 'id' del 'user'
//al que le corresponde dicho 'id'
await jwt.verify(data.token, config.secret, (error, decoded) => {
//Si NO existe el 'user' devolvemos un estado de error
if (error) {
console.log('Token No valido')
//return res.status(404).send('El TOKEN ES INCORRRECTO o hay un error de servidor');
} else {
//Mostramos en consola
//console.log('token: ', data.token);
//console.log('topic', topic);
//console.log('decoded: ', decoded);
if (decoded.id === device.userOwnerId) {
console.log('Identificador: ', device.userOwnerId + '/' + device._id);
//Enviamos por el socket
connectionSocket.sendEvent('temperature', data.temperature);
connectionSocket.sendEvent('humidity', data.humidity);
connectionSocket.sendEvent('id', device.userOwnerId + '/' + device._id);
} else {
console.log('Identificador no valido: ', device.userOwnerId + '/' + device._id);
}
};
});
};
//Armamos el topic
topic = device.userOwnerId + '/' + device._id;
console.log('topic: ', topic);
//Registramos un dato recibido por mqtt y lo enviamos al 'socket'
connectionMqtt.registerMQTT(topic, sendToSocket);
//Renderizamos
res.render('devices/detail-device', {
device
});
}
Клиенту (HTML / javascript), я Я использую рули от node.js для динамического обслуживания контента, я не знаю, могу ли я динамически передавать параметры в шаблон для сбора событий:
//Defeinimos la direccion del servidor
//VERIFICAR PRIMERO
const host = 'http://192.168.1.106:3000';
//Almacenamos el dato proveniente del servidor
let sensorStatus = 0;
//Creamos una conexion socket con el servidor
//VERIFICAR la direccion EL SERVIDOR DEL API DE DESTINO Primero
const connection = io(host);
//Ejecutamos tan pronto se cargue la ventana
window.onload = function() {
//connection.emit('Prueba', 'Hello server from client');
//Escichamos el evento 'connect' para verificar la conexion con el servidor
//Mostramos en consola si todo ha salido bien
connection.on('connect', function() {
console.log('Enlazado con el servidor: ', host);
});
//Recibimos del servidor del valor por medio de websockets
connection.on('temperature', function(data) {
console.log('temperature: ', data);
//Cambiamos el valor de la grafica
updateGauge(data);
});
`//Recibimos del servidor del valor por medio de websockets`
connection.on('humidity', function(data) {
console.log('humidity: ', data);
});
//Recibimos del servidor del valor por medio de websockets
connection.on('id', function(data) {
console.log('id: ', data);
});
};
НО данные полученный ВСЕМИ клиентами, независимо от того, зарегистрирован клиент или нет, я использую jwt и идентификатор пользователя и устройства для аутентификации. Как я могу различить клиентов и сделать сообщение прибывающим к желаемому / SPECIFI C зарегистрированному клиенту?
Спасибо и извините за мой engli sh.