MQTT es un protocolo de mensajería simple y liviano que se utiliza para establecer comunicación entre múltiples dispositivos. Es un protocolo basado en TCP que se basa en el modelo de publicación-suscripción. Este protocolo de comunicación es adecuado para transmitir datos entre dispositivos con recursos limitados que tienen un bajo ancho de banda y bajos requisitos de energía. Por lo tanto, este protocolo de mensajería se usa ampliamente para la comunicación en IoT Framework.
Modelo de publicación-suscripción:
este modelo involucra a múltiples clientes que interactúan entre sí, sin que se establezca ninguna conexión directa entre ellos. Todos los clientes se comunican con otros clientes solo a través de un tercero conocido como Broker.
Cliente y corredor MQTT:
los clientes publican mensajes sobre diferentes temas para el corredor. El intermediario es el servidor central que recibe estos mensajes y los filtra en función de sus temas. Luego envía estos mensajes a los respectivos clientes que se han suscrito a esos diferentes temas.
Por lo tanto, el cliente que se ha suscrito a un tema específico recibe todos los mensajes publicados sobre ese tema.
Figura: modelo de publicación-suscripción
Aquí, el corredor es el centro central que recibe mensajes, los filtra y los distribuye a los clientes apropiados, de modo que tanto los publicadores de mensajes como los suscriptores son clientes.
ventajas :
- Fácil escalabilidad:
este modelo no se limita a la comunicación uno a uno entre clientes. Aunque el cliente publicador envía un solo mensaje sobre un tema específico, el intermediario envía múltiples mensajes a todos los diferentes clientes suscritos a ese tema. De manera similar, los mensajes enviados por múltiples clientes editores sobre múltiples temas diferentes se enviarán a todos los múltiples clientes suscritos a esos temas.
Por lo tanto, la comunicación de uno a muchos, de muchos a uno y de muchos a muchos es posible utilizando este modelo. Además, los clientes pueden publicar datos y al mismo tiempo recibir datos gracias a este protocolo de comunicación bidireccional. Por lo tanto, MQTT se considera un protocolo bidireccional. El puerto MQTT sin cifrar predeterminado que se utiliza para la transmisión de datos es 1883. El puerto cifrado para la transmisión segura es 8883. - Elimina las conexiones inseguras:
en un sistema complejo donde varios dispositivos están conectados entre sí, cada dispositivo no solo debe administrar sus conexiones con otros dispositivos, sino que también debe garantizar que estas conexiones sean seguras. Pero en el modelo de publicación-suscripción, el intermediario se convierte en el servidor central que administra todos los aspectos de seguridad. Es responsable de la autenticación y autorización de todos los clientes conectados. - Comunicación liviana:
la transmisión de datos es rápida, eficiente y liviana porque los mensajes MQTT tienen una huella de código pequeña. Estos mensajes de control tienen un encabezado fijo de 2 bytes de tamaño y un mensaje de carga útil de hasta 256 megabytes de tamaño.
Temas:
en MQTT, el tema es una string UTF-8 que el intermediario usa para filtrar mensajes para cada cliente conectado individual. Cada tema consta de uno o más niveles temáticos diferentes. Cada nivel de tema está separado por una barra inclinada, también llamado separador de nivel de tema. Tanto los temas como los niveles distinguen entre mayúsculas y minúsculas.
Ejemplo de tema –
home/kitchen/table
Aquí, “hogar”, “cocina” y “mesa” son diferentes niveles de tema.
El comodín es una característica adicional que se usa en MQTT para hacer que los temas y sus niveles sean más flexibles y fáciles de usar.
Los temas de MQTT incluyen dos tipos de comodines:
1. Nivel único: «+»
El comodín de nivel único representado por el símbolo «+» puede reemplazar el nivel único en el tema.
Ejemplo:
si el cliente desea información sobre todas las mesas presentes dentro de la casa, se suscribirá al tema:
home/+/table
De ahí que cualquier información publicada relacionada con mesas, dentro de la cocina, salón, dormitorio, etc, pueda obtenerse sobre este tema.
Figura: temas de un solo nivel en MQTT
2. Múltiples niveles: “#”
El comodín de múltiples niveles representado por el símbolo “#” puede reemplazar múltiples niveles en el tema.
Ejemplo:
si un cliente desea información sobre todos los objetos presentes dentro de la cocina, la sala, el dormitorio o cualquier otra habitación en la planta baja, se suscribirá al tema:
home/groundfloor/#
Por lo tanto, cualquier información publicada sobre temas relacionados con artículos de cocina, artículos de dormitorio, artículos de sala se puede obtener sobre este tema. En este caso se puede obtener información de hasta múltiples niveles.
El siguiente programa ilustra cómo se puede implementar MQTT en javascript.
Javascript
//JavaScript Program for publish-subscribe model /* jshint esversion : 6 */ "use strict"; //Importing MQTT var mqtt = require('mqtt'); //Creating an instance of the client var client = mqtt.connect({clientId: "001"}); //Definiting constants var topic = "home/kitchen/table"; var message = "Table inside the kitchen"; var options = {retain: false, qos: 1}; //On successful connection client.on('connect', function () { console.log(" After successful connection: ", client.connected); //If client is connected, then publish on the topic if (client.connected) { console.log(" Publishing on topic: ", topic); client.publish(topic, message, options); } }); //On connectivity error client.on('error', function (error) { console.log(" Connection error: ", error); }); //On receiving message client.on('message', function (topic, message) { console.log(" Received message: ", message.toString(), "on topic: ", topic); client.end(); }); function init() { //Subscribing to the topic console.log("\n Subscribing to topic"); client.subscribe(topic, {qos: 1}); } //Start of the program init();
Publicación traducida automáticamente
Artículo escrito por devshreebharatia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA