Cómo desarrollar un cliente JavaScript de Chat

/ / Blog, Digital Development
chat-js-alfresco
Order of the Bee, una nueva manera de entender Alfresco CE
Alfresco Community funciona sobre Oracle

La tendencia de desarrollo actual, basada en la integración de servicios, promueve la creación de un ecosistema de aplicaciones interrelacionadas que permite al usuario una experiencia cohesionada con su dispositivo. Sin embargo, en ocasiones, puede resultar conveniente que los datos de los usuarios no pasen por servicios o aplicaciones de terceros.

Los servicios tradicionales de Chat con protocolo XMPP han ido siendo sustituidos por tecnologías de mensajería como Whatsapp, Telegram o iMessage. Algunos usuarios, quizá impulsados por la nostalgia, han vuelto a utilizar los viejos canales de IRC. Sin embargo, la adopción en los últimos años de la tecnología  websockets por parte de los productos de Chat, ha abierto una nueva ventana de oportunidades para este tipo de software. En especial, resultan indicados para organizaciones que requieran comunicaciones internas privadas y accesibles desde cualquier tipo de terminal, ya que permiten gestionar todos los intercambios de información en un servidor dedicado propio de la compañía y disponen de clientes JavaScript basados en tecnología REST que funcionan en la mayoría de dispositivos.

La implantación de este tipo de soluciones requiere la interacción de un conjunto heterogéneo de componentes que deben ser integrados y parametrizados para lograr el servicio descrito:

  • Servidor XMPP con soporte para websockets (a través de protocolo BOSH)
    • Opcionalmente puede utilizarse un gestor de conexiones BOSH específico
  • Servidor web con soporte para redirecciones, para utilizar el puerto HTTP estándar
  • Cliente de Chat JavaScript, que permite proveer el servicio sin requerir la instalación de software adicional en los dispositivos
  • Software de mantenimiento de sesión, para evitar que los usuarios introduzcan sus credenciales en los cambios de contexto
  • Integración con LDAP o Active Directory, lo que permite integrar el servicio con sistemas de Single Sign On

Servidores XMPP

Existen diferentes servidores XMPP opensource con soporte para websockets mediante protocolo BOSH:

  • Openfire – Uno de los productos más consolidados del mercado, desarrollado en tecnología Java y con soporte de http-bind por defecto a través del puerto 7070
  • ejabberd – Una alternativa muy popular, a pesar de estar desarrollada en el poco conocido Erlang. Ofrece soporte http-bind a través del puerto 5280
  • Prosody – Es la alternativa académica, escrita en Lua y con soporte http-bind por el puerto 5280
  • Tigase – Uno de los últimos en llegar, por lo que resulta un producto menos maduro pero desarrollado en una tecnología más actual. Basado en Java y con soporte http-bind por el puerto 5280

Gestor de conexiones BOSH

A pesar de que los servidores XMPP ya incorporan el soporte al protocolo BOSH, es posible instalar un gestor de conexiones especializado, que nos permitirá acceder a funcionalidades avanzadas y realizar una gestión más eficiente de los recursos. Se instalan como un proxy web entre el puerto HTTP BOSH (5280) y el puerto XMPP (5222 o 5223).

  • Punjab – Desarrollado en Python y con soporte para conexiones persistentes
  • node-xmpp-bosh – Desarrollado en node.js y con soporte exclusivo para websockets

Servidor web

Existen diferentes servidores web que nos permiten redireccionar las peticiones al puerto HTTP estándar (80) hacia el puerto BOSH (5280). Por ejemplo, con Apache HTTPd, puede utilizarse el módulo proxy (mod_proxy) o el módulo rewrite (mod_rewrite) para obtener este comportamiento.

Cliente de Chat JavaScript

La elección de un cliente JavaScript para el sistema, depende de las necesidades del usuario, puesto que existen multitud de desarrollos opensource disponibles:

  • Strophe.js – Provee los servicios básicos de conexión mediante http-bind, es utilizado como componente base por la mayoría del resto de clientes JavaScript
  • Candy.js – Incorpora los servicios http-bind en componentes HTML reutilizables que pueden ser integrados en aplicaciones web
  • Converse.js – Incluye funcionalidades y componentes más básicos que Candy.js, pero puede ser un buen componente de integración en aplicaciones web que no requieran servicios avanzados de Chat
  • Node.js y socket.io – Además de los productos mencionados, existen alternativas de desarrollo que pueden ser interesantes en función del sistema en que deseemos integrar el Chat

Mantenimiento de sesión

La mayoría de los componentes descritos arriba no disponen de un servicio integrado para el mantenimiento de sesión de usuario, pero esta funcionalidad puede ser desarrollada a través de los servicios básicos de conexión de Strophe.js connect y attach. Asimismo, es necesario controlar en sesión de usuario o en almacenamiento local del navegador los identificadores básicos de conexión del protocolo XMPP (jid, sid y rid).

LDAP

Finalmente, puede resultar conveniente realizar la identificación de usuarios mediante un LDAP corporativo. Tanto Openfire como ejabberd disponen de este servicio, aunque no proveen ningún mecanismo de Single Sign On. Puede desarrollarse una integración a nivel de aplicación mediante kerberos o CAS para autenticar al usuario directamente en el servicio de Chat.

chat-js-alfresco

El desarrollo de un servicio de Chat interno para una organización puede ser construido integrando el amplio catálogo de componentes opensource que existe a disposición de los desarrolladores, permitiendo así dotar a la compañía de una plataforma de mensajería privada y accesible desde cualquier dispositivo.

Unidad de negocio, keensoft

1 Comment to “ Cómo desarrollar un cliente JavaScript de Chat”

  1. ITALO dice:

    Se puede hacer en windows.
    Tendrás un manual de implementacion.
    Gracias.