J'espérais pouvoir mettre en œuvre un serveur XMPP simple en Java.
Ce dont j'ai besoin, c'est d'une bibliothèque qui puisse analyser et comprendre les requêtes xmpp d'un client. J'ai examiné Smack (mentionné ci-dessous) et JSO. Smack semble n'être qu'un client, donc bien qu'il puisse aider à analyser les paquets, il ne sait pas comment répondre aux clients. JSO est-il maintenu, il semble très vieux. La seule voie prometteuse est de démonter Openfire qui est un serveur XMPP entièrement commercial (OSS).
J'espérais juste avoir quelques lignes de code en plus de Netty ou Mina, afin de pouvoir commencer à traiter des messages sur le fil.
Joe -
La réponse à ce que j'essaie de faire est un peu longue - je vais essayer d'être bref.
Il y a deux choses, qui ne sont que vaguement liées :
1) Je voulais écrire un serveur XMPP parce que j'imagine écrire un protocole personnalisé pour que deux clients puissent communiquer. En fait, je pense à une application iPhone en réseau - mais je ne voulais pas m'appuyer sur des protocoles binaires de bas niveau parce que l'utilisation de quelque chose comme XMPP signifie que l'application peut "grandir" très rapidement d'une application locale basée sur le wifi à une application basée sur Internet...
Les messages échangés doivent avoir une latence relativement faible, donc à proprement parler, un protocole binaire serait préférable, mais j'ai pensé qu'il pourrait être intéressant d'explorer si XMPP n'introduisait pas trop de frais généraux, de sorte que je pourrais l'utiliser et bénéficier de son extensibilité et de sa flexibilité plus tard.
2) Je travaille pour Terracotta - j'ai donc cette tendance folle à tout regrouper. Dès que j'ai commencé à penser à écrire du code serveur personnalisé, j'ai compris que je voulais le mettre en cluster. Terracotta rend la mise à l'échelle des POJO Java triviale, alors j'ai eu l'idée de construire un serveur XMPP super simple comme application de démonstration pour Terracotta. En gros, chaque utilisateur se connectait au serveur par une connexion TCP, qui enregistrait l'utilisateur dans un hashmap. Chaque utilisateur aurait une LinkedBlockingQueue avec un thread d'écoute prenant les messages de la queue. Ensuite, tout utilisateur connecté qui souhaite envoyer un message à un autre utilisateur (par exemple, une ancienne application de chat) envoie simplement un message XMPP (comme d'habitude) à cet utilisateur via la connexion. Le serveur le récupère, recherche l'objet utilisateur correspondant dans une carte et place le message dans la file d'attente. Comme la file d'attente est groupée, que l'utilisateur de destination soit connecté au même serveur physique ou à un serveur physique différent, le message est délivré et le thread qui écoute le récupère et le renvoie sur la connexion tcp de l'utilisateur de destination.
Donc - un résumé pas trop court, j'en ai peur. Mais c'est ce que je veux faire. Je suppose que je pourrais simplement écrire un plugin pour Openfire pour accomplir le #1 mais je pense qu'il prend soin de beaucoup de plomberie donc il est plus difficile de faire le #2 (surtout que j'espérais une très petite quantité de code qui pourrait tenir dans un simple projet Maven de 10-20kb).