Apr 22

Haciendo un cliente de chat XMPP

Por cosas del trabajo me he puesto a hacer un cliente web de chat sencillito. Básicamente necesito una sala única en la que los usuarios se conecten nada más entrar en la aplicación web y puedan chatear en común.

La primera aproximación fue instalar un servidor de chat XMPP (Openfire) y un cliente web, con la intención de "tunear" el cliente para que hiciera un auto-login en la sala en cuestión. Los clientes que probé fueron Sparkweb y jwchat. El primero está en flash, por lo que se me hace un poco imposible de tunear (no tengo ni idea de flash ni herramientas de desarrollo adecuadas). El segundo es javascript, pero tras un par de días trasteando con su código, decidí dejarlo y ver lo que me costaría hacer yo mi propio cliente a medida.

Puestos a codificar, la primera prueba en java, ya que es el lenguaje que mejor conozco. Un Applet no me convence (los usuarios tienen que tener la máquina virtual instalada), pero me puede servir para aprender un poco la mecánica de XMPP y los chats.

Buscando una librería java que me permita hacer un Applet cliente, me encuentro con smack. Aunque tuve algún problemilla inicial con la conexión, la librería me funcionó bien y está bastante bien documentada. En una tarde conseguí hacerme un Applet rápido con lo que yo quería. Por supuesto, código guarro para que funcionara y sin rematar los detalles, ya que mi objetivo era aprender y no terminar la aplicación.

Después fuí al siguiente paso, conseguir hacer el cliente de Chat, pero sin Applet. Hay bastantes librerías javascript para hacer este tipo de cliente: xmpp4js, jsjac, strophe, …), pero la programación en javascript se me hace un poco cuesta arriba. Así que dándole vueltas al asunto y buscando en google, me encuentro con xmpp4gwt. Parecía la solución a todos mis problemas. GWT me permite programar en java el cliente y luego, la magia de GWT, convertiría mi código java en javascript, lo que me evita programar directamente en javascript y evita que los usuarios tengan que tener instalada la máquina virtual. Además, me permitiría aprender un poco de GWT, del que sólo he oído hablar. Dicho y hecho, manos a la obra.

Pero no todo el monte es orégano. No he visto librería más diabólica que este xmpp4gwt.

  1. Esa página mantiene montones de proyectos asociados, servidor de chat, cliente de chat, librerías de chat, etc, etc, etc. Esos proyectos van creando variantes, cambiando de nombre e incluso de página, repositorio y de todo. Me costó casi una tarde entera encontrar dónde estaba la dichosa librería xmpp4gwt como librería. Resulta que ahora se llama jaxmpp2, sólo vienen los fuentes que debes bajarte de subversion y el único enlace que he encontrado al repositorio está en su redmine, aquí https://projects.tigase.org/projects/jaxmpp2/repository El enlace al repositorio en la página principal pide usuario y password, por lo que imagino que será otro repositorio.
  2. No hay documentación en absoluto de nada de nada, ni siquiera viene comentado el código. Lo más parecido a algo que te diga por donde empezar, está aquí http://www.tigase.org/content/jaxmpp2 (documentación abundante donde las haya). El resto de documentación, como he leído por ahí, es coger el proyecto emite (un cliente chat gwt que usa xmpp4gwt) y ver cómo lo usa.

Total, que tres días después de pelearme con encontrar la librería, montarlo todo en eclipse, descubrir cómo manejarme con GWT y mucho ensayo, prueba y error, tengo la cosa encaminada aunque todavía no he conseguido ni siquiera conectarme  a Openfire. Mi error actual creo que es que pensaba que podía conectarme directamente con esta librería al puerto 7070 de Openfire, que es el que usa para clientes http. Pero veo que parece ser necesario hacer el montaje en serio, es decir, un servidor Apache con una redirección del puerto http al 7070 de Openfire y el cliente web instalado en el servidor apache. Creo que a esto lo llaman http-binding y será mi entretenimiento durante el día de hoy.

Entradas relacionadas:

3 Responses to “Haciendo un cliente de chat XMPP”

  1. Cesar Says:

    Muchas gracias por compartir tu experiencia.
    Un saludo.

  2. Diario de Programación » Blog Archive » Jugando con JSF Says:

    […] Haciendo un cliente de chat XMPP Etiquetasanécdotas assembly base de datos blog chorradas chuwiki CVS eclipse enlaces firefox foro google grails groovy Herramientas hudson integración continua java javascript junit kanban linux log4j maven mediawiki metodologías métricas php proyectos python redmine scrum seo smf sonar spam tdd trabajo ubuntu varios visitas web windows wordpress ágil Meta […]

  3. Herald Says:

    Hola,
    Socio yo estoy intentando hacer un cliente, lo hice sin libreria ninguna a golpe de rfc y esas cosas y con telnet que hice en visual studio .net 2008 y logre ver como funciona el xmpp como cliente, lo que estoy es interesado en buscar un codigo o como empezar para usarlo como servidor, es decir hacer un mini-servidor xmpp.
    saludos,

Leave a Reply