java - library - igniterealtime
Buenas XMPP Java Libraries para el lado del servidor? (10)
Creo que ya miró la solución correcta: Openfire
No es una solución comercial. Es un servidor XMPP encima de Mina y Jetty escrito en Java liberado bajo la licencia Apache. Se acerca mucho a lo que pediste. Si bien sé que solicitó una biblioteca, ¿por qué no utilizar algún software de código abierto desarrollado y estable que pueda extenderse fácilmente como Openfire?
Esperaba implementar un servidor XMPP simple en Java.
Lo que necesito es una biblioteca que pueda analizar y comprender las solicitudes xmpp de un cliente. He observado Smack (mencionado a continuación) y JSO. Smack parece ser solo un cliente, por lo que si bien puede ayudar a analizar paquetes, no sabe cómo responder a los clientes. Se mantiene JSO parece muy viejo. La única vía prometedora es separar Openfire que es todo un servidor XMPP comercial (OSS).
Solo esperaba algunas líneas de código encima de Netty o Mina, para poder comenzar a procesar algunos mensajes por cable.
Joe -
Bueno, la respuesta a lo que estoy tratando de hacer es algo larga: intentaré que sea breve.
Hay dos cosas, que solo están relacionadas de manera vaga:
1) Quería escribir un servidor XMPP porque me imagino escribiendo un protocolo personalizado para que se comuniquen dos clientes. Básicamente, estoy pensando en una aplicación para iPhone en red, pero no quería confiar en los protocolos binarios de bajo nivel porque usar algo como XMPP significa que la aplicación puede "crecer" muy rápidamente de una aplicación local basada en wifi a una basada en Internet. ...
Los mensajes intercambiados deberían tener una latencia relativamente baja, por lo que estrictamente un protocolo binario sería lo mejor, pero sentí que podría valer la pena explorar si XMPP no introdujo demasiados gastos generales como para poder usarlo y obtener los beneficios de su extensibilidad y flexabilidad más tarde.
2) Trabajo para Terracota, así que tengo esta loca intención de agrupar todo. Tan pronto como comencé a pensar en escribir algún código de servidor personalizado, pensé que quería agruparlo. Terracotta hace que escalar los POJO de Java sea trivial, así que pensé en construir un servidor XMPP super simple como una aplicación de demostración para Terracotta. Básicamente, cada usuario se conectaría al servidor a través de una conexión TCP, que registraría al usuario en un hashmap. Cada usuario tendría un LinkedBlockingQueue con un hilo de escucha tomando un mensaje de la cola. Entonces, cualquier usuario conectado que quiera enviar un mensaje a cualquier otro usuario (por ejemplo, cualquier aplicación de chat antigua) simplemente emite un mensaje XMPP (como de costumbre) a ese usuario a través de la conexión. El servidor lo recoge, busca el objeto de usuario correspondiente en un mapa y lo coloca en la cola. Como la cola está agrupada, independientemente de si el usuario de destino está conectado al mismo servidor físico o a un servidor físico diferente, el mensaje se entrega y el hilo que está escuchando lo recoge y lo envía de regreso a la conexión de tcp del usuario de destino.
Entonces, no estoy muy lejos de un resumen, me temo. Pero eso es lo que quiero hacer. Supongo que podría escribir un complemento para Openfire para lograr el n. ° 1, pero creo que se encarga de una gran cantidad de plomería, así que es más difícil hacer el n. ° 2 (especialmente porque esperaba una cantidad muy pequeña de código que podría caber en un proyecto Maven simple de 10-20 kb).
Echa un vistazo a Vorpal . Es un marco de Java EE 6 que implementa el protocolo XEP-0114.
Encontré un buen servidor xmpp basado en Java: http://www.tigase.org/
Ignite Realtime comparte su API Tinder, que es un elemento básico extraído de OpenFire solo para la creación de componentes del lado del servidor y posiblemente otros servidores. Implementa los bloques básicos de XMPP y puede comenzar desde allí.
Pasé por la misma búsqueda. Primero probé Smack y luego me di cuenta que estaba dirigido a c2s (cliente a servidor) y no tenía lo que necesitaba. Miré a Tinder pero no me gustó el modelo de licencia (también cuando lo miré era mucho más crudo). Finalmente miré a Whack y me di cuenta de que era lo que necesitaba, pero me faltaba mucho (por eso creo que surgió Tinder).
Entonces ... ¿mi solución? Whack Whack, agregó un código para abstraer las cosas, y trata de que sea más fácil de usar: http://github.com/Communitivity/Adirondack
Escribí una biblioteca de Scala basada en eso para ayudar a crear agentes externos basados en componentes, vea http://github.com/Communitivity/Shellack y http://github.com/Communitivity/MinimalScalaXMPPComponent
Uno de mis principales objetivos era facilitar la redacción de un componente rápidamente. Un ejemplo de tal componente está a continuación:
object Main {
/**
* @param args the command line arguments
*/
def main(args: Array[String]) :Unit = {
new XMPPComponent(
new ComponentConfig() {
def secret() : String = { "secret.goes.here" }
def server() : String = { "communitivity.com" }
def subdomain() : String = { "weather" }
def name() : String = { "US Weather" }
def description() : String = { "Weather component that also supported SPARQL/XMPP" }
},
actor {
loop {
react {
case (pkt:Packet, out : Actor) =>
Console.println("Received packet.../n"+pkt.toXML)
pkt match {
case message:Message =>
val reply = new Message()
reply.setTo(message.getFrom())
reply.setFrom(message.getTo())
reply.setType(message.getType())
reply.setThread(message.getThread())
reply.setBody("Received ''"+message.getBody()+"'', tyvm")
out ! reply
case _ =>
Console.println("Received something other than Message")
}
case _ =>
Console.println("Received something other than (Packet, actor)")
}
}
}
).start
}
}
Sé que la intención es construir un pequeño truco en el PO. Sin embargo, si alguna vez hay interés en escalarlo, seguridad de extremo a extremo, etc. Sugeriría mirar a Soapbox desde Coversant. Ellos son nuestros socios. Usamos SMACK en nuestro entorno de máquina virtual en tiempo real, JamaicaVM para comunicarnos con Soapbox.
Además, si la intención es comunicarse con una aplicación de servidor y no volver a implementar un servidor XMPP (por ejemplo, Soapbox), se puede usar el cliente SMACK para eso. Es un cliente del servidor XMPP, pero la instancia de comunicaciones reales puede ser de cliente a cliente a través del servidor XMPP.
Su mejor opción es usar un servidor existente y agregarle su funcionalidad. Escribir un servidor completo desde cero, incluso utilizando una biblioteca, será mucho más difícil de lo que esperaba.
¿Puede decirnos más sobre el problema que está tratando de resolver? Luego podemos indicarle un servidor apropiado y ayudarlo a ubicarlo en el lugar correcto.
También de Ignite Realtime es la API de Whack específicamente para construir componentes XMPP
Whack es una biblioteca de componentes Open Source XMPP (Jabber) para componentes XMPP. Una biblioteca pura de Java, puede integrarse en sus aplicaciones para crear cualquier cosa, desde un componente XMPP completo hasta integraciones simples de XMPP, como enviar interceptación y actuar sobre ciertos mensajes.
mira esto:
esta es una biblioteca de nivel inferior. está en estado de incubación y parece que nadie lo está presionando. pero es una gran API y espero que progrese.
http://xmpp.org/xmpp-software/libraries/ tiene una lista de bibliotecas de software para XMPP. Aquí hay una instantánea desactualizada de ella: