Cómo utilizar Java para desarrollar software de mensajería instantánea basado en Jabber
Como herramienta de comunicación entre individuos, la mensajería instantánea ha alcanzado un gran éxito. En algunos lugares, ha reemplazado al correo electrónico como método preferido de contacto en línea, y ahora los desarrolladores están aplicando la tecnología a la comunicación entre aplicaciones y entre aplicaciones.
Hasta hace poco, sólo un puñado de proveedores de servicios dominaban esta tecnología. Normalmente, los servicios populares de mensajería instantánea son silos de comunicación basados en protocolos propietarios. Las implementaciones enfrentan una elección difícil: admitir múltiples protocolos o bloquearse en uno. En cualquier caso, la implementación deberá depender de servidores pertenecientes a proveedores de servicios de mensajería instantánea (IM).
Los protocolos abiertos ayudan a los desarrolladores a escapar de las trampas de la propiedad. Las ventajas son múltiples: los protocolos abiertos fomentan el desarrollo de implementaciones competitivas (algunas de código abierto). Fomentan la adopción generalizada de protocolos de acceso público, evitando así el desarrollo de silos de comunicación y enfoques aislacionistas en la prestación de servicios. En muchos sentidos, los protocolos abiertos hacen posible Internet. En el campo de la mensajería instantánea, los protocolos abiertos garantizan que los sistemas y protocolos cerrados no obstaculicen la interoperabilidad basada en el desarrollo de servidores de mensajería instantánea.
Jabber es un protocolo abierto para mensajería instantánea y servicios en tiempo real. Como principal candidato para un protocolo de acceso público, Jabber tiene el potencial de romper los controles de propiedad de los servicios de mensajería instantánea.
Este artículo presentará cómo practicar el envío de mensajes Jabber simples y cómo desarrollar un servidor de anuncios simple basado en estándares abiertos y API y productos de código abierto.
¿Por qué utilizar Jabber?
Los estándares y la arquitectura de Jabber ayudan a crear un sistema de mensajería instantánea distribuido, que recuerda a un sistema de correo electrónico distribuido a través de Internet, al que los usuarios pueden conectarse localmente. Este enfoque contrasta directamente con la arquitectura de sistema único que ofrecen proveedores de servicios populares como AIM (AOL Instant Messaging), ICQ, MSN (Microsoft Networks) y Yahoo, donde los servicios de mensajería son proporcionados por uno o un grupo de servidores centralizados: Jabber utiliza el esquema básico SMTP (Protocolo simple de transferencia de correo) tiene casi el mismo esquema de direcciones para determinar la dirección de su punto final (humano, máquina, software). Por ejemplo, minombre@elogex.com es una dirección Jabber válida o JID (ID de Jabber) en la terminología de Jabber. Por estas razones, los sistemas basados en Jabber son superiores a los sistemas propietarios existentes. Además, las puertas de enlace para servicios propietarios de mensajería instantánea deben utilizar protocolos permitidos.
Hay una variedad de servidores Jabber (incluido el que usamos en este artículo) disponibles de forma gratuita, lo que significa que ya no necesita depender de proveedores de servicios de mensajería instantánea de terceros (los servicios Jabber de terceros requieren una Los usuarios alojados de terceros también son útiles).
Estandarización
Mientras analizo las ventajas del estándar Jabber, debo mencionar el trabajo de los estándares IM del IETF. Al momento de escribir este artículo, su IMPPWG (Grupo de Trabajo de Mensajería Instantánea y Protocolo en Tiempo Real) ha desarrollado varios RFC, los más importantes de los cuales son:
-RFC 2778: Mensajería instantánea y en tiempo real Modelo
-RFC 2779: Requisitos para mensajería instantánea/protocolos en tiempo real
El IMPPWG ha redactado un estándar de Internet llamado CPIM (Public IM).
El protocolo Jabber también es un borrador de estándar de Internet, pero está fuera del alcance del trabajo del IMPPWG.
¿Dónde encaja Jabber en este esfuerzo de estándares? Según el sitio web de Jabber, Jabber "se compromete a admitir plenamente cualquier protocolo abierto de mensajería en tiempo real, incluidos los protocolos IETF. Si se agrega soporte para los protocolos IETF, Jabber se posicionará como la plataforma líder de código abierto para protocolos IETF. Hasta la fecha, El trabajo del IETF se centra en recopilar requisitos en lugar de implementarlos. Por ahora, Jabber es solo un protocolo abierto de mensajería instantánea y servicios de campo con amplio soporte de código abierto, por lo que se ha convertido en el estándar de facto para la mensajería instantánea abierta. El competidor a tener en cuenta es el protocolo Jxta de Sun Microsystems, otro protocolo basado en XML para desarrolladores de aplicaciones peer-to-peer (P2P). Sin embargo, actualmente existen varias implementaciones de Jxta, debido a sus orígenes relativamente recientes. El impacto ha sido mínimo en comparación con la
Descarga e instalación
de Jabber. Para comenzar con Jabber, primero necesita descargar las herramientas necesarias: un servidor Jabber, un cliente Jabber y. Se necesita una API para ayudar a administrar y ocultar parte de la complejidad del manejo de sockets, análisis XML, creación de mensajes, etc.
Servidor Jabber
Para ejecutar Jabber, el servidor Jabber que elija no será un problema ya que ya aceptan Jabber XML estándar y se comunican con las aplicaciones finales para descargar la carga, que también es Jabber estándar. Jabberd es el servidor Jabber original y es de código abierto (pero no está basado en Java). Requiere instalación y configuración. El servidor Jabber original, Jabberd, es de código abierto (pero no está basado en Java), es fácil de instalar y configurar y se ejecuta en la mayoría de las plataformas, incluidas bases de datos de terceros Unix, Linux, Windows y Mac OS. y cree el esquema de base de datos necesario.
En los ejemplos de esta publicación de blog, usaré Jabberd, donde se encuentran disponibles descargas de código fuente y binario. Esto describe cómo configurar una distribución de código fuente. Si realmente desea compilarlo usted mismo, puede descargar la distribución binaria desde la página de inicio de Jabberd. La instalación es relativamente simple en plataformas Windows. Siga el asistente de instalación paso a paso.
Una vez completada la instalación, no se requiere configuración. En Windows 2000, no se requiere configuración. Simplemente haga doble clic en el binario para iniciar el servidor.
Agente de usuario/Cliente
Decidí utilizar el cliente Exodus, otra tecnología de código abierto para este programa. Me gusta particularmente la pestaña de depuración de Exodus, que te permite ver correctamente el XML enviado y recibido por el cliente, además puedes escribir mensajes Jabber como XML simple y enviarlos al servidor. Todos estos son útiles para probar protocolos y servidores Jabber.
Exodus es fácil de instalar. Descargue el archivo zip de Exodus (estoy usando la versión 0.6 en este artículo). Extraiga el archivo directamente al directorio donde desea instalar el cliente.
En esta versión, los archivos son binarios simples y un archivo .dll. Puede descargar la API de Muse desde la página de inicio de Muse.
Envío del primer mensaje Jabber
Para enviar un mensaje instantáneo Jabber, debe inicializar la API Muse Jabber creando una instancia de la clase JabberContext y luego pasando su contenido como una sesión Jabber. Parámetros del método createSession() de la clase de fábrica:
1 //Inicializar el contexto Jabber
2 JabberContext jabberContext = new JabberContext("user", "pass", "localhost")
4 //crea una instancia de la fábrica de sesiones de Jabber
5 Jabber jabber = new Jabber()
6 //crea una nueva sesión
5 p>
7 JabberSession jabberSession = jabber. createSession(jabberContext);
El ejemplo anterior muestra la creación de un nuevo contexto en la línea 2. JabberContext almacena información sobre el usuario especificado (nombre de usuario, contraseña y dirección de usuario), así como información que luego se utilizará para crear una sesión utilizando JabberContext. El contexto contiene un identificador de sesión único que luego se utilizará para crear la sesión. Para aclarar la intención, utilicé el nombre de usuario, la contraseña y el servidor directamente.
La línea 5 crea una fábrica de sesiones de Jabber, que utilizamos para crear una nueva JabberSession en la línea 7, que Muse introduce en el servicio principal proporcionado por la interfaz del servidor Jabber. Los principales servicios del servidor son:
-Servicio de conexión: conectar y desconectar el servidor Jabber
-Servicio de usuario: autenticación y registro de usuarios
-Servicio de campo : Reciba información de campo de otros usuarios/servicios y transmita su propia información de campo
-Servicio de registro: lista de amigos o libreta de direcciones
-Servicio de chat: envíe múltiples tipos de información
-Transmisión de mensajes: envíe múltiples tipos de mensajes: chat grupal, chat privado, encabezados, etc.
-Servicio de Servidor: Obtenga información sobre los servicios proporcionados por este servidor Jabber
-Servicio de Cliente: Obtenga información sobre otros usuarios, como la hora en que el usuario inició sesión por última vez p>
Ahora que tenemos una sesión Jabber inicializada, podemos usarla para conectarnos al servidor Jabber usando el método connect() en el objeto JabberSession que acabamos de crear:
8 //Conectar a el servidor
9 jabberSession.connect("localhost", 5222);
-Servicio al cliente: obtiene información sobre otros usuarios, como la hora en que el usuario inició sesión por última vez. 5222);
Para conectarnos al servidor Jabber, necesitamos especificar la dirección y el número de puerto de la máquina en el servidor especificado. De forma predeterminada, el puerto Jabber predeterminado es 5222.
Ahora que JabberSession está conectado al servidor, podemos iniciar sesión usando el método login() en el servicio:
10 //Iniciar sesión en el servidor Jabber
11 jabberSession . getUserService().login();
En la línea 11, usamos JabberSession para obtener una referencia a UserService y luego llamamos al método login() en el servicio. Tenga en cuenta que el método en sí no especifica ninguna información del usuario. Cuando crea JabberSession en la línea 7 anterior, login() obtendrá esta información del JabberContext asociado con JabberSession.
Ahora que hemos iniciado sesión exitosamente en el servidor Jabber, podemos comenzar a enviar y recibir mensajes. El siguiente fragmento de código muestra cómo crear un mensaje de estilo de encabezado simple:
12 // Crear un mensaje de prueba
13 JabberChatMessage msg = new
14 JabberChatMessage( JabberChatMessage.TYPE_HEADLINE). TYPE_ HEADLINE);
15 msg.setSubject("Hola mundo");
16 msg.setBody("Hola mundo"); setTo("user2@localhost");
En la línea 13, creamos una instancia de JabberChatMessage. Un único parámetro especifica el tipo de mensaje que queremos: TYPE_HEADLINE. El nombre de la clase JabberChatMessage es engañoso; de hecho, puede usarse para contener cualquiera de los cuatro tipos de mensajes definidos en el protocolo Jabber: normal, chat, título y error. En la línea 15, setSubject() y setBody() especifican el tema y el contenido respectivamente. Finalmente, setTo() establece el JID del destinatario del mensaje en la línea 17.
Bajo envoltorio, JabberChatMessage convierte toda esta información en un árbol DOM (Document Object Model) interno para que cuando estemos listos para enviar un mensaje al servidor Jabber, podamos generar XML fácilmente.
El último paso es utilizar el método sendMessage() para enviar el mensaje:
18 //Enviar el mensaje
19 jabberSession.sendMessage(msg)
En secreto
Basado en el hecho de que se utiliza el ejemplo anterior, la API de Muse oculta efectivamente todos los detalles relacionados con la administración de conexiones y el análisis XML, lo que le permite concentrarse en el tarea que tenemos entre manos: crear un servicio de mensajería. Aún así, es útil comprender algunos de los intercambios de protocolos subyacentes. Centrémonos en el intercambio XML, lo que se describe en el código anterior sucede cuando nos conectamos al servidor, iniciamos sesión y enviamos la información.
En el siguiente intercambio XML, los mensajes recibidos por el cliente (nuestro código de muestra) tienen el prefijo RECV y los mensajes enviados al servidor tienen el prefijo ENVIAR:
ENVIAR: lt;?xml version= "1.0" codificación="UTF-8" ? gt;
lt; flujo: flujo a="localhost"
xmlns="jabber: cliente"
xmlns: flujo=".org/space/start