Buone librerie Java XMPP per lato server?

Speravo di implementare un semplice server XMPP in Java.

Ciò di cui ho bisogno è una libreria in grado di analizzare e comprendere le richieste xmpp da un client. Ho guardato Smack (menzionato sotto) e JSO. Smack sembra essere solo client, quindi mentre potrebbe aiutare ad analizzare i pacchetti non sa come rispondere ai client. JSO ritiene che sia molto vecchio. L’unica strada promettente è quella di separare Openfire che è un intero server XMPP commerciale (OSS).

Speravo solo qualche riga di codice su Netty o Mina, così ho potuto iniziare a elaborare alcuni messaggi dal filo.


Joe –

Beh, la risposta a ciò che sto cercando di fare è un po ‘lunga – cercherò di farla breve.

    Ci sono due cose, che sono solo vagamente correlate:

    1) Volevo scrivere un server XMPP perché immagino di scrivere un protocollo personalizzato per comunicare con due client. Fondamentalmente sto pensando ad un’app per iPhone in rete – ma non volevo affidarmi a protocolli binari di basso livello perché usare qualcosa come XMPP significa che l’app può “crescere” molto velocemente da un’app locale basata su Wi-Fi a una basata su Internet …

    I msg scambiati dovrebbero essere a latenza relativamente bassa, quindi in senso stretto un protocollo binario sarebbe il migliore, ma sentivo che valeva la pena esplorare se XMPP non introducesse troppo overhead in modo tale da poterlo usare e quindi trarre benefici dalla sua estensibilità e flessibilità dopo.

    2) Lavoro per la terracotta – quindi ho questa tendenza pazza a raggruppare tutto. Non appena ho iniziato a pensare di scrivere un codice server personalizzato, ho pensato di volerlo raggruppare. Terracotta rende banale la riduzione dei POJO Java, quindi il mio pensiero era quello di creare un server XMPP super semplice come app dimostrativa per Terracotta. Fondamentalmente ogni utente si connetterebbe al server tramite una connessione TCP, che registrerebbe l’utente in una hashmap. Ogni utente avrebbe un LinkedBlockingQueue con un thread listener che riceve il messaggio dalla coda. Quindi qualsiasi utente connesso che desidera inviare un messaggio a qualsiasi altro utente (ad esempio qualsiasi vecchia applicazione di chat) invia semplicemente un messaggio XMPP (come al solito) a tale utente tramite la connessione. Il server lo preleva, cerca l’object utente corrispondente in una mappa e posiziona il messaggio sulla coda. Poiché la coda è in cluster, indipendentemente dal fatto che l’utente di destinazione sia connesso allo stesso server fisico o da un server fisico diverso, il messaggio viene recapitato e il thread in ascolto lo preleva e lo rimanda alla connessione TCP dell’utente di destinazione.

    Quindi – non troppo corto di un riassunto ho paura. Ma questo è quello che voglio fare. Suppongo che potrei semplicemente scrivere un plugin per Openfire per realizzare il n. 1, ma penso che si prenda cura di un sacco di plumbing quindi è più difficile fare il n. 2 (specialmente perché speravo in una quantità molto piccola di codice che potesse rientrare in un semplice progetto Maven 10-20kb).