Bem-vindo ao Blog da DMarkInfo

Conteúdos e novidades sobre Tecnologia da Informação.

Explorando XMPP e Ejabberd: Um Estudo Profundo

Postado por Eduardo Marques em 06/12/2025
Explorando XMPP e Ejabberd: Um Estudo Profundo

Ao longo da minha jornada estudando tecnologias de comunicação em tempo real, cheguei inevitavelmente ao XMPP e ao Ejabberd. Apesar de ambos existirem há muitos anos, percebi que eles continuam extremamente relevantes, principalmente quando começamos a estudar arquitetura distribuída, mensageria, chats corporativos, IoT e protocolos descentralizados.

Hoje quero registrar, em primeira pessoa, tudo o que aprendi até agora — não como alguém que já domina a tecnologia, mas como alguém explorando, descobrindo, quebrando a cabeça e anotando os melhores caminhos.

Começando pelo básico: O que é XMPP e por que ele importa?

Quando comecei a estudar XMPP, a primeira coisa que me chamou atenção foi sua filosofia descentralizada. Ao contrário de soluções modernas baseadas em APIs privadas, XMPP nasce com a ideia de:

  • comunicação distribuída

  • servidores independentes

  • extensibilidade

  • foco em interoperabilidade

Em vez de pensar em um servidor monolítico que gerencia tudo, o XMPP funciona parecido com o conceito de e-mail:
cada servidor pode falar com outro, cada usuário tem um endereço único, e ninguém precisa depender de uma empresa gigantesca para se comunicar.

Esse formato descentralizado me pareceu extremamente atual quando pensamos em privacidade, segurança digital e futuro da internet.

Como visualizei um usuário XMPP

A forma de endereço de usuários foi uma das primeiras coisas que estudei. É chamada de JID (Jabber ID):

usuario@dominio
Ou, de forma completa:
usuario@dominio/resource

O resource representa o dispositivo ou sessão. Por exemplo:

eduardo@dudaserver.com/celular
eduardo@dudaserver.com/notebook

Achei fantástico que XMPP suporta várias sessões simultâneas, com prioridade de mensagem. Algo nativo, sem gambiarras.

Por que escolhi estudar Ejabberd?

Existem vários servidores XMPP, como Prosody, Openfire e Tigase.
A escolha do Ejabberd foi simples:

  • é open source

  • é extremamente robusto e escalável

  • é escrito em Erlang (o que me intrigou muito pela arquitetura tolerante a falhas)

  • é amplamente usado em ambientes reais (WhatsApp, por exemplo, foi originalmente baseado em XMPP)

Além disso, muitos tutoriais indicam o Ejabberd como ótima porta de entrada.
E realmente é.

Primeira impressão: instalar o Ejabberd

Quando fiz meu primeiro teste, instalei o Ejabberd no Linux usando apt:

sudo apt-get install ejabberd

Depois comecei a mexer no arquivo de configuração, normalmente encontrado em:

/etc/ejabberd/ejabberd.yml

Uma das primeiras coisas que configurei foi o domínio:

hosts:
  - "dudaserver.com"

E logo em seguida criei meu primeiro usuário:

ejabberdctl register eduardo dudaserver.com minhaSenha123

A sensação foi a mesma de criar um usuário de e-mail — simples e direto.

Entendendo a arquitetura do Ejabberd

Quanto mais eu estudava, mais percebia que o Ejabberd não é só um “servidor de chat”. Ele é uma plataforma distribuída em Erlang, com:

  • Hot code swapping (trocar partes do sistema sem reiniciar)

  • Clusterização nativa

  • Alta tolerância a falhas

  • Suporte integrado a módulos, como MUC (Multi-User Chat), PubSub, WebSockets etc.

Esse conjunto me mostrou que estudar Ejabberd é, na prática, estudar sistemas distribuídos modernos.

Primeiro teste prático: um chat entre dois usuários

Criei dois usuários:

ejabberdctl register maria dudaserver.com senhateste1
ejabberdctl register joao dudaserver.com senhateste2

Depois usei um cliente XMPP simples (como o Dino no Linux ou o Gajim) para conectar os dois.

E ali, quase sem configuração adicional, consegui mandar mensagens entre os usuários.
Fiquei impressionado com a simplicidade do fluxo.

Mas o mundo XMPP fica realmente interessante com as extensões (XEPs)

XMPP tem um conjunto enorme de XEPs — XMPP Extension Protocols.

Foi nesse ponto que comecei a entender a força real do protocolo.

Algumas XEPs que estudei:

XEP-0045 — Multi-User Chat (MUC)

Permite criar salas de chat públicas ou privadas.
Com isso, criei salas no Ejabberd assim:

ejabberdctl create_room sala1 conference.dudaserver.com dudaserver.com

XEP-0085 — Chat States

Adiciona “digitando…”, “parou de digitar”, “entrou no chat”.
Nunca imaginei que esse tipo de funcionalidade fosse padronizada desde os anos 2000.

XEP-0060 — PubSub

Essa é uma das mais poderosas.
Permite construir sistemas de eventos publish/subscribe.
Usei para simular notificações:

  • um publisher envia um evento

  • vários subscribers recebem

Percebi que PubSub em XMPP pode substituir partes inteiras de filas como RabbitMQ em alguns cenários.

Testando XMPP como solução de IoT

O que me surpreendeu: XMPP não é só chat.

Decidi simular um dispositivo IoT enviando telemetria.
Usei a XEP-0323 e XEP-0325 (IoT Sensor Data).

Fiz um script Python usando a biblioteca slixmpp:

from slixmpp import ClientXMPP
class SensorXMPP(ClientXMPP):
    def __init__(self, jid, password):
        super().__init__(jid, password)
    def send_data(self):
        self.send_message(
            mto="central@dudaserver.com",
            mbody="temperatura: 22.5",
            mtype="chat"
        )
xmpp = SensorXMPP("sensor01@dudaserver.com", "123456")
xmpp.connect()
xmpp.process()
xmpp.send_data()

Quando vi a mensagem chegando no outro lado, percebi o potencial da plataforma como backend de IoT.
XMPP tem:

  • estados

  • eventos

  • autenticação

  • criptografia

  • comunicação assíncrona

Tudo nativo.

Security e TLS

Configurei TLS no Ejabberd:

certfiles:
  - "/etc/letsencrypt/live/dudaserver.com/
fullchain.pem"
  - "/etc/letsencrypt/live/dudaserver.com/
privkey.pem"

E pronto — qualquer cliente XMPP moderno já suporta TLS automaticamente.

Cluster: meu primeiro teste distribuído

Ejabberd permite criar um cluster com um comando como:

ejabberdctl join_cluster 'ejabberd@node2'

Fiz isso em duas VMs e pude observar:

  • usuários conectados em um nó conseguiam enviar mensagens a usuários no outro

  • se um nó caísse, o outro continuava ativo

Mesmo sem configuração complexa.

Foi uma das experiências mais interessantes deste estudo.

Estudar XMPP e Ejabberd me mostrou que existem tecnologias maduras e extremamente poderosas que, mesmo com a explosão de soluções modernas, continuam sendo base sólida para:

  • comunicação em tempo real

  • sistemas descentralizados

  • IoT

  • notificações

  • chats privados e corporativos

  • plataformas escaláveis

Minha sensação é que aprender XMPP é como aprender “fundamentos avançados”:
coisas que você carrega para a vida inteira, independente do framework da moda.

Ainda tenho muito o que explorar: módulos customizados em Erlang, integração com HTTP APIs, push notifications, escalonamento massivo, e padrões de autenticação avançados.

Mas, como estudo inicial, já enxerguei o poder do protocolo e por que ele continua sendo referência em arquitetura distribuída.

Em breve vou postar um artigo que ensina a criar uma pequena aplicação em Python conectando com Ejabberd via XMPP, usando a biblioteca slixmpp (moderna e assíncrona).

Compartilhe este post:
Voltar para a Home