Journal Parlons XMPP - épisode 1 - les bases

Posté par (page perso) . Licence CC by-sa
119
24
juin
2015

Salut à Vous,

Bon, comme je trouve vraiment dommage que XMPP soit mal connu ou compris, j'ai décidé de commencer une série d'articles pour vous expliquer ce que c'est.

Ces articles sont destinés à un public averti, mais pas forcément de développeurs, et j'espère qu'il vous aidera à comprendre les intérêts de ce protocole et à mieux utiliser vos logiciels.

Étant développeur du projet Salut à Toi, je donnerai probablement souvent des exemples avec.

Donc commençons par les bases.

XMPP c'est quoi ? C'est un protocole de messagerie et de présence standard, et extensible (XMPP signifie « eXtensible Message and Presence Protocol », soit « protocole de présence et messagerie extensible »), c'est à dire qu'il est documenté et utilisé comme une référence (ici validée par un organisme de standardisation : l'IETF). Ceci permet à tous les logiciels qui l'utilisent de parler la même langue, et d'être interopérables. Il s'agit d'un protocole libre, c'est à dire que vous pouvez obtenir la documentation et l'utiliser gratuitement, sans restriction légale ou technique, et que vous pouvez l'améliorer ou le modifier (mais si vous déviez et que vous ne proposez pas vos modifications, vous risquez de perdre la compatibilité avec les autres logiciels).

XMPP est décentralisé et fédéré, c'est à dire que vous pouvez avoir des serveurs un peu partout, ils pourront (s'ils ne l'interdisent pas explicitement dans leur configuration) communiquer entre eux.

C'est un protocole populaire, de nombreux logiciels permettent de l'utiliser : en serveurs on peut citer Prosody, Ejabberd, Openfire, Tigase, MongooseIm, Metronome, etc. En client: Gajim, Poezio, Pidgin, Psi, Swift, Jappix, Movim, et bien sûr Libervia/Salut à Toi (je vous laisse chercher les sites officiels vous-même). Une liste plus complète (serveurs, clients et bibliothèques) est disponible ici: https://xmpp.org/xmpp-software/ .

Si vous ne voulez pas installer un serveur chez vous, de nombreux serveurs publics sont disponibles: en France on peut citer ceux de l'APINC (jabber.fr, im.apinc.org, etc), de La quadrature de Net, etc. Une petite liste (la page n'est pas à jour, n'hésitez pas à contribuer !) est disponible ici en français, sinon vous pouvez regarder sur https://xmpp.net/directory.php ou http://www.jabberes.org/servers/ (oui il y en a beaucoup !). Mais je vous recommande très fortement d'installer votre propre serveur ou de vous approcher d'une association locale avec qui vous pouvez communiquer facilement : d'une part si vous installez vous-même, ça vous permet de mieux maîtriser vos données, et d'autre part si vous voulez une fonctionnalité en particulier, il vaut mieux pouvoir demander facilement aux administrateurs une mise à jour.

Bon maintenant qu'on sait tout ça, essayons de créer un compte.

Une fois un serveur installé ou un serveur public choisi, vous pouvez créer un compte. Vous aurez alors une adresse, un « jid » (pour Jabber ID, « Jabber » est l'ancien nom du protocole, ce nom appartient désormais à une société privée, il est juste gardé ici pour des raisons historiques).

Cette adresse est de la forme nom_local@domaine.tld/ressource, ou en forme canonique (ce qu'on appelle le « bare jid ») nom_local@domaine.ext. Par exemple la mienne est goffi@jabber.fr . Cela ne vous rappelle rien ? Et oui ça ressemble beaucoup aux adresses de courrier électronique !

Mais alors c'est quoi la ressource ? La ressource est liée au logiciel client que vous utilisez pour vous connecter : XMPP a été pensé dès l'origine pour permettre à plusieurs clients de se connecter en même temps (il y a 10 ans, peu de protocoles de messagerie le permettaient, et se reconnecter ailleurs signifiait souvent la déconnexion du premier client), et cette ressource permet de les identifier. Autrement dit, vous n'avez une ressource que quand vous êtes connectés, et elle est différente pour chaque client que vous utilisez : si je me connecte avec Libervia, Gajim et Movim, j'aurais 3 ressources différentes.

Il y a eu plusieurs écoles pour nommer la ressource, parfois on s'en servait pour indiquer le lieu de connexion (« maison », « bureau »), les clients mettaient souvent leur nom par défaut (« gajim », « psi »). Aujourd'hui, il est admis qu'il vaut mieux avoir une ressource non prédictible, car sinon quelqu'un peut savoir si vous êtes connectés ou pas (même si vous ne souhaitez pas que ça se sache) en faisant une requête à cette ressource. Il vaut donc mieux laisser le serveur choisir la ressource pour nous.

Enfin, votre ressource est associée à une priorité: elle permet de déterminer, si plusieurs ressources sont connectées, laquelle va recevoir le message. Mais nous y reviendrons plus tard.

Dans le prochain épisode je vous parlerai des extensions et de la découverte de fonctionnalités.

Voilà, dites-moi si vous êtes intéressés par cette série, si cela vous semble trop technique, ou si vous avez des remarques ou des corrections à faire. Je ne sais pas encore si je vais tout publier sur DLFP ou sur mon blog, je pense a priori faire sur les 2 en même temps.

  • # Oui!

    Posté par . Évalué à 10.

    Et merci d'avance!

    • [^] # Re: Oui!

      Posté par . Évalué à 2.

      + 1, je suis super intéressé ! Merci !!

  • # Bravo

    Posté par (page perso) . Évalué à 1.

    Merci pour ce partage. Ça change des commentaires agressifs.

    • [^] # Re: Bravo

      Posté par . Évalué à 2.

      Ça n'a rien à voir avec le journal, ça, c'est plus le jour où tu le publies…

      ----------> [ ]

  • # Très intéressant !

    Posté par (page perso) . Évalué à 7.

    Vivement la suite de cette série :)

  • # Champ d'applications

    Posté par . Évalué à 7.

    Je ne vais pas revenir sur la percée d'XMPP, je pense que ce n'est pas le sujet ici.

    Pour rester dans le ton du journal, voilà ce qui pique ma curiosité (je précise que mes compétences en développement s'arrêtent à quelques scripts pour manipuler des données, donc je n'ai pas d'idée de projet derrière, juste de la curiosité).

    Je vais anticiper un peu en disant que XMPP permet de faire "beaucoup de choses", via ses extensions notamment.

    Du coup, la question que j'aurais, c'est à quel point il est difficile de s'y mettre pour un dév qui a besoin d'une solution légère à mettre en place rapidement, ou est-ce qu'il faut s'y retrouver d'abord entre le protocole de base et une forêt d'extensions?

    Et un jour, j'aimerais bien trouver une liste des concurrents à XMPP avec le comparatif et des représentants de chaque "option" qui expliquent pourquoi ils ont fait leur choix.
    M'enfin ne prends pas ça comme une demande, hein! Vu que je ne contribue qu'avec mes yeux…

    • [^] # Re: Champ d'applications

      Posté par (page perso) . Évalué à 3.

      La base est de XMPP est très simple, et bien expliquée. Et surtout, tu as 99% de chance d'avoir une bibliothèque qui fait déjà tout le boulot pour toi (il y en a une pour à peu près tous les langages).

      Les extensions c'est dans un deuxième temps, et souvent du n'a besoin que d'une ou 2. Tu peux en général trouver d'après la description courte, ou vient demander par exemple sur jdev@ (cf http://mail.jabber.org/mailman/listinfo) ou même à moi directement si tu veux être orienté.

      • [^] # Re: Champ d'applications

        Posté par (page perso) . Évalué à 4.

        Aussi, si tu veux vraiment voir à quoi ça ressemble au niveau du protocole, tu as une introduction qui explique bien ici: http://wiki.jabberfr.org/Introduction_au_protocole_Jabber . Mais c'est vraiment pour de la curiosité, à moins de vouloir réinventer la roue, tu as déjà tout ce qu'il faut pour gérer les connexion etc. Il y a une couche de chiffrement en plus non visible dans la doc pointée.

  • # +1

    Posté par . Évalué à 1.

    Très intéressé et je vais même partager avec mon entourage.

    Niveau technique très bien pour moi, pour de la vulgarisation grand public peu être un poil trop.
    Mais cela dépend de la cible recherchée.

    • [^] # Re: +1

      Posté par (page perso) . Évalué à 2.

      Oui c'est clairement un public averti qui est visé, je ne suis pas persuadé qu'il faille parler de XMPP au grand public (du moins pas dans un premier temps), qui est une notion technique, mais plutôt expliquer depuis un logiciel, et petit à petit venir à des notions comme la décentralisation, l'importance d'un standard, ou le chiffrement.

  • # EN SIMPLE

    Posté par . Évalué à -6.

    EN GROS XMPP = MSN avec possibilité d'installer son serveur (oui c'est pas vendredi mais bon).
    D'ailleurs ce serai bien que le protocole évolue, pour avoir la possibilité par exemple d'éditer/supprimer des messages (ou je pense à Skype). Car là cela ressemble trop à un IRC sous stéroïdes…

  • # Très interessé en effet

    Posté par . Évalué à 4.

    J'utilisent XMPP depuis des années, j'ai mon propre serveur, mais j'ai encore de grosse lacune dans la compréhension de ce protocole au delà du simple MSN.

    Je suis sen train de construire une maison bioclimatique avec beaucoup de domotique (avec entre autre du KNX, du DALI et beaucoup de truc fait main, avec des STM32 (un peu comme arduino) et un serveur Wandboard), et je me demande si ce protocole pourait pas être une solution au dessus de KNX pour la communication de mes différents objet…

    Après, peut être que XMPP est un peu lourd a implémenter sur un microcontroleur, mais les STM32 sont quand même puissant… alors a voir…

    Si des personnes on joué avec XMPP en embarqué, je suis preneur…

    • [^] # Re: Très interessé en effet

      Posté par (page perso) . Évalué à 6.

      XMPP est tout à fait indiqué ici (au Fosdem il y avait une démonstration de pilotage de lampes avec XMPP).

      Il faut probablement que tu t'orientes vers les XEPs sur l'internet des objets (XEP-0323 à XEP-0326), mais comme je n'utilise pas je ne peux pas trop te dire précisément, il faudrait demander sur jdev@ (http://mail.jabber.org/mailman/listinfo).

      Il y a une extension pour rendre XMPP adapté justement aux microcontroleurs avec peu de mémoire: https://xmpp.org/extensions/xep-0322.html

      Je pense encore une fois qu'il y a déjà des bibliothèques qui implémentent tout ça, le mieux est de se renseigner sur jdev@ ou sur un salon XMPP (http://wiki.xmpp.org/web/Main_Page ==> « Talk with us »).

    • [^] # Re: Très interessé en effet

      Posté par (page perso) . Évalué à 2.

      Et si XMPP ne convenait pas à ton besoin il existe MQTT https://fr.wikipedia.org/wiki/MQTT qui est "fait pour ça" (la communication entre modules)
      En tout cas je le trouve vraiment très bien foutu et j'ai hâte de pouvoir m'y mettre.

      Pour en expliquer un bout très rapidement:
      - Il y a un broker qui va répartir les messages
      - Des capteurs qui vont émettre des messages
      - Des actionneurs qui vont s'abonner à un type de message pour les recevoir de la part du broker

      Ils peuvent donc choisir à quels messages ils vont réagir en choisissant le "topic" par exemple 'tous les messages concernant la cuisine' ou 'seulement les messages concernant la température mais de toutes les pièces'

      Il existe des priorités de messages et une péremption dans le temps

      Ton installation domestique est aguichante rien qu'avec le peu que tu en dis :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.