Oct 042009
 

Parmi les commentaires rattachés à mon premier post parlant d’XMPP, il y en a eu un me demandant de présenter des exemples d’utilisation d’XMPP par un programme python. J’avais promis de le faire. Avec un certain délais, pour ne pas dire un délai certain, je vais essayer de répondre à cette demande en la généralisant. A savoir : à quoi ça peut servir xmpp pour un programme. Et comme je suis bavard, je finirais en me déguisant en madame soleil et en donnant mon avis sur le futur de l’utilisation d’XMPP.

XMPP, oui mais on peut faire quoi avec ?

La première chose à savoir pour répondre à cette question, c’est que le protocole XMPP c’est bien bien plus qu’un protocole de messagerie instantanée.

La discussion vocal est sensée être gérée (je dis sensée parce qu’à ma connaissance le support de cette fonctionnalité est assez ‘en mode alpha). L’envoi de fichier également, mais c’est un classique de l’IM ça.

Ce que l’on sait moins c’est qu’un mécanisme de publication très complet est gérée (PubSub) qui permet à des auteurs de publier du contenu et d’en limiter l’accès et à des lecteurs de lire le dit contenu. Et comme on est sur un fonctionnement intelligent (et connecté) il n’y a pas besoin de faire comme avec le RSS, c’est à dire d’avoir des lecteurs qui se connectent toutes les N minutes pour voir si il y a un nouvel article à lire. Là non, les lecteurs se connectent au serveur XMPP qui les notifiera du fait qu’un nouvel article est lisible, quand cela sera le cas.

Il existe également des mécanismes de data form, pour envoyer des ‘formulaires’ (comme des formulaires web quoi) entre deux points xmpp.

Plusieurs mécanismes de lancement de commande, que ce soit par xml-rpc ou avec une XEP (les XEP sont un peu les RFC du XMPP) qui spécifie comment un noeud XMPP peut demander à un autre nœud de lancer une commande et comment cet autre noeud peut ensuite renvoyer le résultat.

Et c’est loin d’être tout, il en existe tout plein d’autre de XEP, si la liste vous intéresse vous la trouverez ici : http://xmpp.org/extensions/

Ok, mais pour faire quoi au final ?

Parce qu’avoir un protocole qui fait plein de choses, c’est bien. Savoir quoi en faire, c’est mieux. Bon là évidemment vous n’êtes limités que par votre imagination, après tout, je ne vais pas pouvoir vous faire la liste exhaustive de toute les choses que vous pouvez faire avec XMPP.

Mais, parce que je suis gentil, je vais vous donner quelques exemples.

Le plus facile, c’est bien entendu, lorsqu’on développe un programme qui intègre de la messagerie instantanée. Plutôt que de perdre du temps à réinventer la roue, autant utiliser un truc qui est éprouvé. (je me répète peut être, mais comme exemple parfait on peut citer Eve Online qui utiliser xmpp pour le chat intra jeux).

C’est loin d’être la seule utilisation possible. Personnellement, je l’utiliserais dans tout les mécanismes de communication client / serveur qui n’ont pas un besoin ultime de non latence. Il est certains qu’envoyer les déplacements des joueurs par XMPP, dans un fps ne serait pas une excellente idée. Mais dans tout ce qui se rapproche à un jeux de stratégie, gestion, jeux de rôle en tour par tour. Op, du xmpp. (par exemple imaginons la version informatique du jeux ‘Les colons de Catane‘, c’est en XMPP sinon rien, de même pour tout les jeux web qui fleurissent aujourd’hui, une version non web serait à faire en xmpp).

La je parle de jeux, mais ça pourrait s’appliquer à bien d’autre domaine. Communication entre un programme opérateur et les automates qu’il contrôle par exemple. (imaginons un truc simple, un logiciel qui doit contrôler des automates qui sont chargés de fermer / ouvrir des vannes et qui peuvent donner leur statuts courant, où alors des daemons systèmes qui logueraient leur activités à travers du XMPP).

On peut (et on devrait) utiliser le XMPP à chaque fois que l’on se retrouve devant un mécanisme de publication / consultation de contenu. (comment ça je parle du web classique ? Mais pas du t… si en fait si).

Le futur et les perspectives du XMPP

Je vous le dis, et vous pouvez me croire, on aura jamais besoin de plus de 640Ko de mémoi… Mais qu’est ce que je dis moi là?

Le futur du XMPP. J’espère qu’il sera radieux. J’espère que ce protocole (utilisé massivement par google d’ailleurs) se développera et remplacera peu à peu les choses sous optimales que l’on fait au jour d’aujourd’hui.

Je trouve par exemple, complétement hallucinant tout le mécanisme de rss aujourd’hui. Avec les problèmes qu’impliquent le fait de consommer des ressources pour rien dans 80 % du temps (à savoir quand votre client RSS va vérifier que non, il n’y a vraiment pas de nouvel article à lire sur les 343 flux rss que vous suivez).

J’espère vraiment le développement futur d’une sorte d’XMPP-Web, avec des navigateurs xmpp qui se connectent sur des sites web xmpp. Des sites XMPP qui mixeront alors d’une façon complétement naturelle de la gestion de contenus, de la discussion entre lecteurs (sans devoir passer par des rajouts en js pour gérer un chat sur la page web..) , des parties du sites ludiques, etc etc ..

Si j’ai un espoir, c’est vraiment celui-là. Un glissement du HTTP-Web au XMPP-web, même si cela doit passer au départ par des plugins pour que les navigateurs HTTP puisse browser des sites XMPP.

Aug 152009
 

Pour ce premier post parlant d’XMPP, je ne vais pas faire trop compliqué, je vais me contenter de faire un petit tour des possibilités qui s’offre au gentil et innocent développeur python qui, ayant découvert le monde merveilleux d’XMPP se décide à utiliser ce joli protocole dans un de ces programmes python.

Il faut dire, que lorsque j’ai commencé à m’intéresser à ce sujet, il y a un peu plus d’un an, j’ai été surpris par le peu de librairies maintenues et proposant un peu plus que la simple paire réception/envoi de message. Aujourd’hui, la situation n’a pas vraiment changé. C’est, je trouve, assez étrange, surtout que cette situation ne se retrouve pas dans d’autre langages qui ont pléthore de librairie (un seul exemple, en Java).

1- Les mortes, ou presque.

Parmi les librairies zombies, je vais en citer deux Zymb  ou jabber.py

Il semble ne plus avoir eu un seul mouvement sur leur deux sites respectifs depuis 2007 ou 2003. La doc est quasiment inexistante, les exemples de même. A ne surtout pas choisir donc, si vous voulez commencer à bidouiller avec XMPP.

2- La  librairie sans code

Sleekxmpp est une petite librairie hébergé sur google code. Je n’ai pas l’impression qu’elle bouge beaucoup au niveau du code, même si des bugs ont été commentés très récemment. Mais, il y a comme un problème. Impossible de récupérer le code source de la dite lib, le svn est vide.

3- La plus complète

Celle qui est, sans aucun doute, la plus complète, celle la version modifié de xmpppy qui est utilisée par gajim. Elle gère énormément de XEP, son développent est continue, le rêve quoi. Sauf que.. j’ai essayé de l’utiliser et le faire sans devoir utiliser tout le code de gajim, c’est un peu (voir beaucoup) mission impossible. Sans compter qu’elle existe en de multiple version (quand je l’ai testé, le support du BOSH était dans une version bien spécifique de la lib, une des branches SVN, je ne sais pas si c’est toujours le cas).

4- Les autres

Xmpppy en version originale ou pyxmp. Elles gèrent un certain nombre de XEP, pas une panacée mais un peu plus que le simple envoi/réception de message. La doc a au moins le mérite d’exister. Une doc API avec même quelques petits exemple de code. J’ai un peu utilisé Xmpppy et elle est pas mal, surtout quand on veut utiliser une librairie légère (sans être ridicule) dans un prog où le XMPP n’est pas central mais une partie, au milieu des autres.

5- Celle que j’utilise.

La librairie que j’utilise actuellement est en fait, au final, presque celle avec laquelle j’ai commencé à faire joujou avec XMPP en python. J’ai commencé en utilisant Twisted words qui est la partie consacré aux Instants Messaging (et IRC) dans Twisted. Autant dire que c’est le parent pauvre de Twisted, peu de doc, peu d’exemple (mais relativement, par rapport aux autres lib, beaucoup), aucune gestion de XEP. Le concept de twisted words xmpp était simple :
Vous avez la puissance de twisted, on vous fournit un moyen de vous connecter et de brancher des callback sur des cheminx XPATH, à vous de faire le reste. D’une simplicité magnifique.

Sauf que, même si le concept est élégant, avoir quelque XEP de gérer, out of the box, c’est un peu mieux, quand on veut juste utiliser le XMPP et pas devenir développeur de lib XMPP.

C’est pour cela que j’utilise Wokkel, une surcouche à Twisted words qui gèrent quelques XEP (dont pubsub). J’ai ainsi quelques XEP (même si je pourrais en avoir plus en essayant d’utiliser la lib de gajim) et je bénéficie de toute la puissance de Twisted.

Une particularité de Twisted (et wokkel) c’est que ce sont des librairies qui sont prévues pour développer des clients ou des serveurs. Certaines fonctionnalités sont donc gérer pour les deux cotés, que pour le coté serveur ou que pour le coté client.

Une autre particularité, qui peut être ennuyeuse, c’est que twisted se fonde sur l’utilisation de ‘reactor’ et qu’il peut parfois être un peu difficile de concilier la façon de fonctionner de twisted avec celle de l’application dans laquelle on veut l’intégrer.