Pergunta

Eu estava esperando para implementar um simples servidor XMPP em Java.

O que eu preciso é uma biblioteca que pode analisar e compreender xmpp pedidos de um cliente.Eu olhei Smack (mencionados abaixo) e OAC.Smack parece ser o cliente, somente assim, embora possa ajudar a analisar pacotes que não sei como responder aos clientes.É OAC mantida parece muito antigo.O único caminho promissor é separar Openfire que é todo um comercial (OSS) servidor XMPP.

Eu estava apenas esperando para algumas linhas de código na parte superior do Netty ou da Mina, para que eu pudesse começar o processamento de algumas mensagens fora do fio.


Joe -

Bem, a resposta para o que eu estou tentando fazer é um pouco longo, vou tentar mantê-lo curto.

Há duas coisas, que são apenas vagamente relacionado:

1) eu queria escrever um servidor XMPP porque eu imaginar escrevendo um protocolo personalizado para dois clientes para se comunicar.Basicamente, eu estou pensando em uma rede de app para iPhone - mas eu não quero depender de binário de nível inferior protocolos porque usar algo como XMPP significa que o aplicativo pode "crescer" muito rapidamente a partir de um local wi-fi com base aplicativo para internet baseado em um...

As mensagens trocadas devem ser relativamente baixa latência, portanto, estritamente falando, um protocolo binário seria melhor, mas eu senti que ele poderia ser a pena explorar se XMPP não apresentar muita sobrecarga de tal forma que eu poderia usá-lo e, em seguida, colher benefícios de sua extensability e flexibilidade posterior.

2) eu trabalho para o Terracota - então, eu tenho essa loucura inclinou-se para cluster de tudo.Assim que eu comecei a pensar sobre a escrita de algumas personalizado código do servidor, eu percebi que eu queria cluster.Terracota faz com que a escala de Java POJOs trivial, então, o meu pensamento era para construir um super-simples servidor XMPP como uma demonstração do aplicativo para o Terracota.Basicamente, cada usuário deve se conectar ao servidor através de uma conexão TCP, que poderia registrar o usuário em um hashmap.Cada usuário teria um LinkedBlockingQueue com um thread de escuta levando a mensagem da fila.Em seguida, qualquer usuário conectado que deseja enviar uma mensagem para qualquer outro usuário (por exemplo,de qualquer aplicativo de bate-papo) simplesmente emite um XMPP mensagem (como de costume) para que o usuário durante a conexão.O servidor pega, olha para o objeto de usuário correspondente no mapa e coloca a mensagem na fila.Uma vez que a fila está em cluster, independentemente do tempo que o usuário de destino está ligado para o mesmo servidor físico, ou um outro server, a mensagem é entregue e o thread que está escutando pega-lo e envia-lo de volta para baixo do usuário de destino da conexão tcp.

Assim não curto muito o de um resumo do que eu tenho medo.Mas é o que eu quero fazer.Eu suponho que eu poderia escrever um plugin para o Openfire para realizar o #1, mas eu acho que ele cuida de um monte de encanamento, então é mais difícil fazê #2 (especialmente porque eu estava esperando por uma quantidade muito pequena de código que poderia caber em uma simples 10-20kb projeto Maven).

Foi útil?

Solução

http://xmpp.org/xmpp-software/libraries/ tem uma lista de bibliotecas de software para XMPP.Aqui está um desatualizado instantâneo de:

ActionScript

C

C++

C# / .NET / Mono

Erlang

Flash

Haskell

Java

JavaScript

Lisp

Objective-C

Perl

PHP

Python

Ruby

Tcl

Outras dicas

Eu passei pela mesma pesquisa.Eu tentei Bater e então percebi que é orientada para c2s (servidor e cliente) e não tem o que eu preciso.Eu olhei para o Pavio, mas não como o modelo de licenciamento (também quando eu olhei era muito mais do raw).Eu finalmente olhei para Bater e percebi que era o que eu precisava - mas está faltando um monte (que é por isso que o Pavio veio sobre eu acho).

Então..a minha solução?Parágrafos de Bater, adicionar algum código para abstrair as coisas, e tentar torná-lo mais fácil de usar: http://github.com/Communitivity/Adirondack

Eu escrevi um Scala biblioteca com base em que, para ajudar a criar um componente externo agentes, consulte http://github.com/Communitivity/Shellack e http://github.com/Communitivity/MinimalScalaXMPPComponent

Um dos meus principais objetivos era tornar fácil a gravação de um componente rapidamente.Um exemplo de como um componente está abaixo:

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
  }
}

Ignite Realtime compartilha sua Estopa API o que é um bloco de construção básico extraído do OpenFire apenas para a criação de componentes do lado do servidor e, possivelmente, de outros servidores.Ele implementa básica XMPP blocos de construção e você está livre para começar a partir de lá.

Também a partir de Ignite Realtime é o Whack API qual é, especificamente, para a construção de XMPP componentes

Whack é uma Fonte Aberta XMPP (Jabber) biblioteca de componentes para XMPP componentes.Uma pura biblioteca Java, ele pode ser incorporado em seus aplicativos para criar qualquer coisa a partir de um completo XMPP componente para simples XMPP integrações como o envio de interceptar e atuando em determinadas mensagens.

Sua melhor aposta é usar um servidor existente e adicionar a sua funcionalidade.A escrita de um servidor inteiro a partir do zero, mesmo usando uma biblioteca, vai ser um monte mais difícil do que você espera.

Você pode nos contar mais sobre o problema que você está tentando resolver?Podemos, então, apontar para um servidor apropriado, e ajudá-lo com o lugar certo para ligar na tomada.

confira:

este é um nível inferior da biblioteca.é na incubação de status e parece que ninguém está empurrando-o.mas é uma ótima api, e espero que o progresso.

http://java.net/project/jso-jabber-stream-objects

Eu acho que você já olhou para a solução correta: Openfire

Não é uma solução comercial.É um Servidor XMPP no topo da Mina e Jetty escrito em Java, lançado sob a Licença Apache.Vem muito próximo do que você pediu.Enquanto eu souber que você solicitou uma biblioteca, por que não usar alguns estável desenvolvido software de código aberto que pode ser facilmente estendido como openfire?

Achei uma boa xmpp servidor baseado em Java : http://www.tigase.org/

Ter um olhar para Vorpal.O seu Java EE 6 framework que implementa XEP-0114 protocolo.

Eu sei que a intenção é construir um pequeno corte no OP.No entanto, se houver algum interesse em expandir, end-to-end de segurança, etc.Gostaria de sugerir olhando Soapbox de Coversant.Eles são nossos parceiros.Nós usamos TAPA na nossa rígido em tempo real ambiente de máquina virtual, JamaicaVM para se comunicar com Soapbox.

Além disso, se a intenção é se comunicar com um servidor de aplicativo, e não para reimplementar um servidor XMPP (e.g.Soapbox), o TAPA do cliente pode ser usado para isso.Ele é um cliente para o servidor XMPP, mas a instância do real de comunicação pode ser a partir do cliente para o cliente através do servidor XMPP.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top