Vue d'ensemble

XMPP (Extensible Messaging and Presence Protocol) a été conçu à l'origine pour les applications de messagerie instantanée.

XMPP a une longue histoire, il est mature et de nombreuses applications et bibliothèques l'utilisent, comme Jabber, Google Talk (maintenant renommé en Hangouts), WhatsApp. Cependant, l'utilisation de XML rend le protocole assez verbeux et les messages volumineux, ce qui le rend moins efficace dans les réseaux mobiles et l'Internet des objets (IoT).

MQTT (MQ Telemetry Transport) est un protocole de communication spécialement conçu pour les appareils IoT, adapté aux dispositifs à faible puissance, capacité et puissance de calcul. Il est rapide et fiable, avec des messages de petite taille et une transmission et analyse efficaces. Par exemple, Facebook Messenger utilise MQTT.

Pour le chat en ligne et les conférences en ligne, l'utilisation de WebSocket + JSON peut être une option plus commode. Si la bande passante est une contrainte, WebSocket + ProtoBuffer pourrait être une meilleure solution.

Exemples :

1. Presence (État de présence)

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<Presence
    from="alice@aaa.com"
    id="1232312312312"
    to="bob@bbb.com"
    >
      <show>online</show>
    </Presence>

2. Message (Message)

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<message
 from="alice@aaa.com"
 id="1232312312312"
 to="bob@bbb.com"
 type="chat"
 >
 <body>Hi Bob</body>
 </message>

3. IQ (Requête et réponse)
- IQ request
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<iq id="1952c42c-8fbf-43d6-9b85-5b0e79c3e3f7:sendIQ" to="bob@bbb.com" type="get" xmlns="jabber:client">
<vCard xmlns="vcard-temp"/>
</iq>

- IQ respond
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<iq type="result" id="1952c42c-8fbf-43d6-9b85-5b0e79c3e3f7:sendIQ" from="bob@bbb.com" to="alice@aaa.com/converse.js-132196857" xmlns="jabber:client">
<vCard xmlns="vcard-temp">
    <FN>Bob</FN>
    <NICKNAME>boy</NICKNAME>
    <URL/>
    <ROLE>Dev</ROLE>
    <EMAIL>
        <INTERNET/><PREF/><USERID>bob@gmail.com</USERID
    </EMAIL>
    <PHOTO>
      <TYPE>image/png</TYPE>
      <BINVAL>iVBORw0KGgoAAAANSUhEU</BINVAL>
    </PHOTO>
</vCard>
</iq>


D'après cette révision rapide du protocole, on peut voir que XMPP et son utilisation de XML comportent beaucoup d'informations redondantes. Bien que complet, il n'est pas suffisamment concis. Ces dernières années, Google Hangout, Microsoft Skype, et Cisco Webex ont progressivement cessé ou diminué leur utilisation de XMPP.

J'ai déjà envisagé de baser XMPP sur JSON au lieu de XML, mais je n'ai pas trouvé la motivation ni le temps de le faire.

Je crois toujours fermement que le monde a besoin d'un protocole similaire à XMPP pour unifier les différents formats de protocoles de messagerie instantanée, permettant aux divers outils de messagerie (WhatsApp, Line, Skype) de communiquer entre eux.