java - programa - Enfrentando a XMPP
xmpp descargar (5)
Wikipedia define XMPP
como:
... un protocolo de comunicaciones de estándar abierto para middleware orientado a mensajes basado en XML.
xmpp.org define XMPP
como:
El protocolo extensible de mensajería y presencia (XMPP) es una tecnología XML abierta para la comunicación en tiempo real, que impulsa una amplia gama de aplicaciones.
Aunque estoy seguro de que ambas definiciones son muy precisas, no me dicen nada de lo que realmente puedo hacer con un desarrollador de Java con XMPP.
Por ejemplo, he escuchado que XMPP se puede usar con medios orientados a mensajes (MOM). ¿Cómo es eso? ¿Puede XMPP de alguna manera integrarse con mis rutas de Apache Camel, mi ESB o alguna implementación de SOA para ofrecer un nivel empresarial mejor / más rápido / más robusto? Si es así, ¿cómo ?!?!
Una buena explicación de XMPP en inglés de King''s, junto con algunos ejemplos prácticos (preferiblemente centrados en MOM) serían muy apreciados. ¡Gracias por adelantado!
Permítanme darles un buen resumen de lo que es XMPP ?
- XMPP (Mensajería Extensible y Protocolo de Presencia)
- Es un protocolo de comunicación en tiempo real.
- El primer servicio de mensajería instantánea basado en XMPP fue Jabber.org
- Un enlace XMPP es BOSH . Otros incluyen TCP y WebSocket .
- BOSH es "Transmisiones bidireccionales a través de HTTP síncrono", una tecnología para la comunicación bidireccional a través del Protocolo de transferencia de hipertexto (HTTP).
- BOSH emula muchas de las primitivas de transporte que son familiares del Protocolo de Control de Transmisión (TCP). Para aplicaciones que requieren comunicaciones "push" y "pull", BOSH es significativamente más eficiente en cuanto a ancho de banda y es más sensible que la mayoría de los otros protocolos de transporte bidireccionales basados en HTTP y las técnicas conocidas como AJAX.
- BOSH logra esta eficiencia y baja latencia mediante un sondeo largo.
¿Cómo funciona XMPP ?
XMPP logra una baja latencia al implementar un sondeo largo .
¿Qué es el sondeo normal y el sondeo largo ?
POLLING NORMAL:
Considere las aplicaciones de chat antiguas que usaban el sondeo normal. Aquí la parte superior de la gráfica indica el lado del cliente. La parte inferior indica el lado del servidor. Deja que el tiempo de espera sea de 5 min.
Client asks the server : " Is there any new message for me ?" Server Responds : "No ! " After 5 min Client asks the server : " Is there any new message for me ?" Server Responds : "No !" After 1 min Client Receives a message After 4 min Client asks the server : " Is there any new message for me ?" Server Responds : "Yes! " + message.
SONDEO LARGO
La parte superior del gráfico es cliente. La parte inferior es el servidor.
Client asks the server : " Is there any new message for me ?" Server Answers : "No ! But you may soon receive a new message, so let me just hold your client state for 5 min in the server." After 5 min Server Responds : "No !" Client asks the server : " Is there any new message for me ?" Server Answers : "No ! But you may soon receive a new message, so let me just hold your client state for 5 min in the server." After 1 min Client Receives a message Server Responds : "Yes! " + message.
Se puede ver claramente, cómo instantáneamente ocurre la comunicación.
Puedes leer más sobre XMPP HERE
En el caso, si tiene curiosidad por configurar su propio servidor XMPP, lea this .
Puedo comenzar a combinar información de todos los tipos de fuentes que se encuentran en Internet usando Google (palabras clave: ejemplos de MoMM de Java de XMPP), reescribir (o incluso copiar) la definición de XMPP, pero por supuesto no lo haré. Simplemente hay demasiado. Tampoco tengo ejemplos disponibles para ti.
A continuación, enumeraré los enlaces que me parecieron más interesantes, para que pueda comenzar a leer y obtener más conocimientos sobre el tema.
1) http://www.xmpp.org/ Este es probablemente el mejor punto de partida. Navegue por el menú de izquierda a derecha y de arriba a abajo. Eso es lo que hice. El sitio enumera servidores, clientes y bibliotecas, por lo que debería poder encontrar los ejemplos deseados de esta manera.
2) http://www.ibm.com/developerworks/webservices/library/x-xmppintro/index.html Borrar artículo, que también menciona MoM. No hay ejemplos de Java, pero Ruby.
3) http://fyi.oreilly.com/2009/05/what-can-you-do-with-xmpp.html Tal vez debería obtener el libro? No hay ejemplos en el artículo.
4) http://kirkwylie.blogspot.com/2008/07/real-mom-is-hard-lets-use-xmpp.html artículo interesante donde la última línea básicamente dice: ¿Por qué usar XMPP si puedes usar AMQP o JMS? ?
Espero que esto te ayude a encontrar lo que necesitas.
XMPP es fundamentalmente un protocolo para que los clientes de salas de chat hablen con un servidor de chat. Camel le permite integrarse con XMPP para que pueda consumir mensajes o generarlos a ese mecanismo http://camel.apache.org/xmpp.html
Cuando empiece a hablar de nivel empresarial, ESB, SOA, etc. y MOM, probablemente esté buscando un mecanismo de mensajería que admita el punto a punto y publique los mensajes de suscripción. Probablemente también esté pensando en cosas como la mensajería garantizada, la alta disponibilidad y la seguridad específica. No los obtendrá de un mecanismo que lee y escribe mensajes de texto en un servidor de chat. Es probable que una plataforma de mensajería como ActiveMQ sea mucho mejor.
Hay muy pocos casos en los que podría contemplar el uso de XMPP con mecanismos de integración, tal vez como un mecanismo de notificación a una sala de chat de desarrolladores o como un mecanismo de cinta de ducto para controlar los servidores que monitorean las instrucciones de un servidor de chat.
XMPP se puede utilizar para una amplia gama de aplicaciones basadas en mensajería. Básicamente, proporciona servicios centrales que se pueden usar para crear aplicaciones de mensajería basadas en XML. Se basa en una arquitectura descentralizada cliente-servidor y utiliza conexiones TCP de larga duración para comunicarse ...
servicios básicos incluyen ...
- cifrado de canales, autenticación, presencia, listas de contactos, mensajería uno a uno, mensajería multipartita, notificaciones
- descubrimiento de servicios, capacidades de publicidad, formatos de datos estructurados, gestión de flujo de trabajo, sesiones de medios de igual a igual
casos de uso de libros de texto ...
- Mensajería instantánea (usando presencia, listas de contactos, mensajería uno a uno)
- chat grupal, juegos, control de sistemas, geolocalización, middleware / computación en la nube, sindicación de datos
- bots (clima, interfaz de base de datos, monitoreo del sistema)
Modos de mensajería / patrones ...
- La mensajería punto a punto se utiliza para enviar a un receptor específico
- la mensajería multiusuario se utiliza para enviar mensajes a un grupo de receptores
- El soporte de publicación / suscripción se utiliza cuando hay un gran volumen de eventos y los sistemas están interesados en diferentes subconjuntos de eventos. Los editores colocan los eventos en temas y los suscriptores indican en qué temas están interesados. Esto desacopla al editor / suscriptor y permite la mensajería escalable en tiempo real. Para obtener más información, consulte este artículo: http://www.isode.com/whitepapers/xmpp-pubsub.html
métodos de despliegue ...
- Usuario XMPP: se conecta como un usuario normal y responde a las solicitudes dirigidas al usuario
- Complementos del servidor XMPP: implementados como parte de la arquitectura del complemento del servidor
- Componentes XMPP: servicio externo a un servidor XMPP que se conecta y se comporta como un complemento
Integración de Java
- Smack API : una biblioteca de Java pura, puede integrarse en sus aplicaciones para crear cualquier cosa, desde un cliente XMPP completo hasta integraciones XMPP simples, como el envío de mensajes de notificación y dispositivos que permiten la presencia.
- Camel XMPP : un componente de Camel que permite la integración con Smack API en las rutas de Camel
A su pregunta específica "¿se puede usar en SOA / middleware?" ....
- sí, se puede utilizar para conectar aplicaciones a través de mensajería XML y API XMPP
- Si la mejor opción tecnológica depende en gran medida de los requisitos.
- Un buen caso de uso, monitoreo / gestión de sistemas interactivos ... aquí hay algunos otros ejemplos.
Además, la integración de XMPP con Camel es trivial. Vea esta prueba unitaria de camel-xmpp para ver un ejemplo básico de la interfaz con un servidor de Google Talk. Además, el marco de trabajo de Camel le permite crear una aplicación e intercambiar fácilmente diferentes tecnologías de mensajería (JMS, STOMP, mina, etc.).
XMPP es un estándar abierto y extensible para comunicaciones en tiempo real.
XMPP viene con un núcleo que se define en su rfc , que describe el protocolo básico para hacer mensajería instantánea e intercambiar información de presencia. Sin embargo, donde XMPP realmente brilla es en su extensibilidad: XMPP define los bloques de construcción (presencia, mensaje y stanzas iq) para crear protocolos de comunicación. Estos suelen venir como extensiones . Una lista de las extensiones estándar disponibles actualmente se puede encontrar here . Los más importantes de estos están generalmente disponibles para todos los servidores XMPP populares. Es exactamente esta extensibilidad la que hace que XMPP sea apropiado como middleware orientado a mensajes.
Permítanme tomar como ejemplo Publicación-Suscripción, que es un patrón típico para el middleware y se convierte en una necesidad tan pronto como se sale del escenario con unas pocas entidades en las que la mensajería simple es adecuada. PubSub se usa en situaciones en las que las entidades o los productores producen información que otras entidades consumirán, los consumidores . Normalmente, la información se escribe en nodos, a los que se suscriben los consumidores. Al suscribirse, reciben notificaciones cuando se agrega / actualiza / elimina un artículo. PubSub puede cubrir con elegancia una increíble cantidad de casos de uso, desde poner en cola los trabajos de larga duración y hacer que los trabajadores los manejen, hasta los microblogs. XMPP tiene una extensión muy robusta y ampliamente disponible para manejar PubSub de una manera estándar, descrita en XEP-0060 y que proporciona un flujo de trabajo para el manejo de publicaciones, suscripciones, notificaciones y seguridad. Ver los casos de uso en el XEP le dará una idea de la simplicidad de todo.
Ahora, mientras que la mayoría de los casos de uso se cubren mediante el uso (o el abuso) de las extensiones estándar existentes, es posible que finalmente necesite el pequeño protocolo personalizado adicional que no está cubierto en otro lugar. Usando el idioma de su elección, puede escribir un componente XMPP que defina su propio protocolo. Luego, conecta el componente al servidor XMPP que está ejecutando y, mediante el uso del simple espacio de nombres, permita que el servidor sepa qué tipo de mensajes puede manejar y permita que el servidor anuncie sus capacidades de protocolo a los clientes que se conectan a él. No hay fin a lo simple o complejo que puedes hacer esto. A falta de un mejor ejemplo, pero tal vez lo suficientemente bueno para ilustrar, here hay un componente que escribí que aprovecha XMPP para realizar la edición colaborativa en tiempo real en el CMS de Plone (similar a Google docs). Si bien los detalles pueden complicarse, creo que echar un vistazo a la "Especificación de protocolo" en esa página le dará una idea.
Finalmente, en cuanto a las bibliotecas específicas de Java como @boday menciona, hay bibliotecas que facilitan el inicio, así como la integración con Apache Camel (aunque solo hace mensajes simples, por lo que puedo ver). Sin embargo, tenga en cuenta que la inversión en comprender cómo funciona XMPP y poder ir más allá de usar las bibliotecas existentes realmente vale la pena y puede llevar a una integración extremadamente potente y simple.