# MQTT

MQTT (Message Queuing Telemetry Transport) és un protocol de missatgeria publish-subscribe basat en el protocol TCP/IP. Inicialment desenvolupat per Andy Stanford-Clark (IBM) i Arlen Nipper (EuroTech), i després publicat com a codi obert. MQTT v3.1.1 és ara un estàndard d'OASIS, l'especificació d'aquest protocol és disponible en HTML i PDF.

## Funcionalitat

Propietats de MQTT :
* Estàndard obert.
* Estructura senzilla (mínim nombre de bytes per cada missatge).
* Fiabilitat (existeix la funció QoS Quality of Service), que ens informa de l'estat de la comunicació.
* Simplicitat (protocol que està definit en 43 pàgines).
MQTT defineix un petit conjunt de missatges :
| Tipus de missatge | Valor | Descripció |
| CONNECT | 1 | Petició del client per a connectar-se al servidor (vegeu Fig1) |
| CONNACK | 2 | Reconeixement de la connexió |
| PUBLISH | 3 | Edició missatge |
| PUBACK | 4 | Reconeixement de l'edició |
| PUBREC | 5 | Edició rebuda (part 1) |
| PUBREL | 6 | Edició alliberada (part 2) |
| PUBCOMP | 7 | Edició completa (part 3) |
| SUBSCRIBE | 8 | Petició de subscripció de client |
| SUBACK | 9 | Reconeixement de subscripció |
| UNSUBSCRIBE | 10 | Petició de desubscripció de client |
| UNSUBACK | 11 | Reconeixement de desubscripció |
| PINGREQ | 12 | Petició de PING |
| PINGRESP | 13 | Resposta de PING |
| DISCONNECT | 14 | Client deconnectant |

## Comparativa de protocols MQTT versus HTTP

Benchmarking de mida de trama:
| Acció | Protocol HTTP | Protocol MQTT | Relació HTTP/MQTT |
| Rebre una unitat de dades (la mínima) | 320 bytes | 69 bytes | 4,6 |
| Enviar una unitat de dades (la mínima) | 320 bytes | 47 bytes | 6,8 |
| Rebre 100 unitats de dades (la mínima) | 12600 bytes | 2445 bytes | 5,1 |
| Enviar 100 unitats de dades (la mínima) | 14100 bytes | 2126 bytes | 6,6 |
Benchmarking de característiques :
| Característica | Protocol HTTP | Protocol MQTT |
| Model | Centrat a les dades | Centrat al document |
| Accions | GET, POST, DELETE especificació complexa | Pub/Sub/Unsub especificació senzilla |
| Mida dels missatges | Missatges llargs | Missatges curts |
| Quality of service | No, cal implementar en la capa d'aplicació | 3 nivells : el millor, almenys 1 cop i exactament 1 cop |
| Distribució de dades | NO, només 1 a 1 | Sí, 1 a n |

## Brokers MQTT

Existeixen molts brokers MQTT disponibles, varien en la seua funcionalitat, alguns d'ells ofereixen funcionalitats addicionals.
Els principals brokers de codi obert són:
* ActiveMQ
* JoramMQ, OW2 JORAM
* Mosquitto
* RabbitMQ
Un estudi comparatiu de les característiques d'aquests diferents brokers (ActiveMQ, Apollo, JoramMQ, Mosquitto i RabbitMQ) es troba disponible aquí Arxivat 2016-03-04 a Wayback Machine..

## Biblioteques de clients

Nombroses biblioteques estan disponibles per programar clients MQTT, per a la majoria dels llenguatges (C, C++, Java, JavaScript, PHP, Python, etc.) i per a la majoria de les plataformes (Linux, Windows, iOS, Android, Arduino, etc.).
El projecte Eclipse/Paho ofereix implementacions de codi obert dels protocols de missatgeria oberts i estàndards destinats a les aplicacions noves i emergents per a la comunicació M2M (màquina-a-màquina) i de l'Internet de les coses (IoT).

## Aplicacions reals

En el món real, hi ha nombrosos projectes que utilitza el protocol MQTT :
* Facebook Messenger : Facebook ha utilitzat aspectes de MQTT en Facebook Messenger.
* L'ultima_versio del sistema de control de senyalització de l'IECC Scalable DeltaRail utilitza MQTT per les comunicacions entre les diferents parts del sistema i els components del sistema de senyalització.
* CloudMQTT és un servei de missatgeria que utilitza el protocol MQTT.

## Referències

* ↑ MQTT 3.1.1 specification
* ↑ http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf
* ↑ «MQTT Essentials» (en anglès). HiveMQ, 20-09-2015.
* ↑ «Programming with Reason» (en anglès). http://programmingwithreason.com. Arxivat de l'original el 2017-07-07. [Consulta: 3 juliol 2017].
* ↑ «Internet of things» (en anglès). https://www.slideshare.net.+[Consulta: 6 juliol 2017].
* ↑ Podem trobar una llista dels brokers disponibles aquí.
* ↑ La llista de les biblioteques de clients disponibles és accessible des d'aquí.
* ↑ En un llibre titulat "Building Smarter Planet Solucions with MQTT and IBM WebSphere MQ Telemetry" IBM descriu diversos exemples d'aplicacions en el domini de la salut i de l'energia.