Sistemas Distribuídos
                                             UFRJ - 2011/1




XMPP:   Extensible Messaging and Presence Protocol

          Caio Guimarães Souza
        Rodolfo Henrique Carvalho
XMPP    (Extensible Messaging and Presence Protocol)




● "É uma tecnologia aberta para comunicação em tempo real
  utilizando XML como formato básico para troca de
  informações. Em essência, XMPP fornece uma maneira de
  mandar pequenos pedaços de XML de uma entidade para
  outra." (XMPP: The Definitive Guide, 2009)
Web em tempo real


● HTTP?

   ○ Não escala bem para atualizações frequentes

   ○ Não escala bem para polling frequente

   ○ Unidirecional

   ○ Faz a pergunta errada: "O que aconteceu no passado?"

● Possibilidade: usar WebSockets, ou XMPP
Protocolos fechados de comunicação instantânea


● ICQ (1996), AOL IM (1997), Yahoo! Messenger (1998),
  MSN (1999)


● Desvantagens

   ○ Só se conversa com usuários do mesmo sistema

   ○ Servidor centralizado de responsabilidade do provedor do
     serviço

   ○ Não se pode escolher o software cliente (a não ser que seja
     feita engenharia reversa)
O surgimento do XMPP


● Jeremie Miller (1999)




   ○ "A couple of friends were playing around with a little Perl script
     that would send messages back and forth between ICQ and
     AIM - two clients could connect to it and it would rewrite
     messages. So I thought, 'Well heck, it isn't that hard to write an
     instant messaging system'"
História do XMPP

● 1999: Liberação do primeiro servidor por Jeremie

● 2000: Desenvolvimento dos primeiros clientes open source e
  bibliotecas pela recém-formada comunidade Jabber

● 2000: 1º serviço IM baseado em XMPP (Jabber.org)

● 2001: Criação da Jabber Software Foundation

● 2004: Formalização do XMPP pelo IETF

● 2005: É lançado o sistema de IM e VoIP Google Talk, baseado no
  XMPP

● 2008: Lançado o Facebook Chat
Serviços

● Channel encryption

● Autenticação

● Presença

● Listas de contato

● Messaging um-para-um e muitos-para-muitos

● Sessões de interação em tempo real peer-to-peer

● ...
Aplicações

● Mensagens instantâneas (Jabber, GoogleTalk, Facebook chat, etc)

● Bate-papo coletivo

● Administração remota

● Controle robótico

● Jogos

● Geolocalização

● Middleware e cloud computing
Aplicações


● Data syndication   (como é feito com RSS e Atom feeds)

● VoIP

● Serviços de identificação    (por exemplo com OpenID, ou OAuth)

                            (...)

● [Use a sua imaginação!]
Arquitetura
Arquitetura
Arquitetura
Primitivas de comunicação


● Message

● Presence

● IQ
<message/>


● Método push básico para transferir informação,
  transporte "fire-and-forget"


  <message from="madhatter@wonderland.lit/teaparty"
  to="alice@wonderland.lit" type="chat">
  <body>Who are you?</body>
  <subject>Query</subject>
  </message>
<presence/>


● Anuncia a disponibilidade de entidades na rede

      <presence from="alice@wonderland.lit/pda">
      <show>xa</show> <status>down the rabbit
      hole!</status> </presence>
<iq/>


● Usado no lugar de <message/> quando se quer
  garantir a entrega de informação ou obter uma
  resposta
<iq/>




Cliente         Servidor
          <iq from="alice@wonderland.lit/pda" id="rr82a1z7"
          to="alice@wonderland.lit" type="get"> <query
          xmlns="jabber:iq:roster"/> </iq>
<iq/>



Servidor       Cliente
       <iq from="alice@wonderland.lit" id="rr82a1z7"
       to="alice@wonderland.lit/pda" type="result">
       <query xmlns="jabber:iq:roster">
       <item jid="whiterabbit@wonderland.lit"/>
       <item jid="lory@wonderland.lit"/>
       <item jid="mouse@wonderland.lit"/>
       <item jid="sister@realworld.lit"/>
       </query>
       </iq>
Implementação de um echo bot
Pontos fortes
● Descentralizado: qualquer um pode rodar um servidor
  XMPP

● Padrão aberto

● Histórico: usado desde 1998, já tem muitas
  implementações de clientes, servidores, componentes,
  bibliotecas e suporte de empresas como Sun e Google

● Segurança: pode rodar em redes privadas; suporte para
  SASL e TLS na especificação; pode usar certificados
  digitais

● Flexibilidade e extensibilidade: permite adicionar
  funcionalidade através de XEPs
Pontos fracos


● Pode não funcionar adequadamente quando o
  tamanho das mensagens é muito grande

● Transmissão de dados binários. Solução:
  transmissão fora de banda, usando mensagens para
  coordenação
Referências


● Use XMPP to Create Your Own Google Talk Client.
  Sarath Lakshman. Revista Linux For You, Maio 2010.

● XMPP: The Definitive Guide. Peter Saint-Andre,
  Kevin Smith, Remko Tronçon. O’Reilly, 2009.

● Wikipedia: Extensible Messaging and Presence
  Protocol
O fim

XMPP

  • 1.
    Sistemas Distribuídos UFRJ - 2011/1 XMPP: Extensible Messaging and Presence Protocol Caio Guimarães Souza Rodolfo Henrique Carvalho
  • 2.
    XMPP (Extensible Messaging and Presence Protocol) ● "É uma tecnologia aberta para comunicação em tempo real utilizando XML como formato básico para troca de informações. Em essência, XMPP fornece uma maneira de mandar pequenos pedaços de XML de uma entidade para outra." (XMPP: The Definitive Guide, 2009)
  • 3.
    Web em temporeal ● HTTP? ○ Não escala bem para atualizações frequentes ○ Não escala bem para polling frequente ○ Unidirecional ○ Faz a pergunta errada: "O que aconteceu no passado?" ● Possibilidade: usar WebSockets, ou XMPP
  • 4.
    Protocolos fechados decomunicação instantânea ● ICQ (1996), AOL IM (1997), Yahoo! Messenger (1998), MSN (1999) ● Desvantagens ○ Só se conversa com usuários do mesmo sistema ○ Servidor centralizado de responsabilidade do provedor do serviço ○ Não se pode escolher o software cliente (a não ser que seja feita engenharia reversa)
  • 5.
    O surgimento doXMPP ● Jeremie Miller (1999) ○ "A couple of friends were playing around with a little Perl script that would send messages back and forth between ICQ and AIM - two clients could connect to it and it would rewrite messages. So I thought, 'Well heck, it isn't that hard to write an instant messaging system'"
  • 6.
    História do XMPP ●1999: Liberação do primeiro servidor por Jeremie ● 2000: Desenvolvimento dos primeiros clientes open source e bibliotecas pela recém-formada comunidade Jabber ● 2000: 1º serviço IM baseado em XMPP (Jabber.org) ● 2001: Criação da Jabber Software Foundation ● 2004: Formalização do XMPP pelo IETF ● 2005: É lançado o sistema de IM e VoIP Google Talk, baseado no XMPP ● 2008: Lançado o Facebook Chat
  • 7.
    Serviços ● Channel encryption ●Autenticação ● Presença ● Listas de contato ● Messaging um-para-um e muitos-para-muitos ● Sessões de interação em tempo real peer-to-peer ● ...
  • 8.
    Aplicações ● Mensagens instantâneas(Jabber, GoogleTalk, Facebook chat, etc) ● Bate-papo coletivo ● Administração remota ● Controle robótico ● Jogos ● Geolocalização ● Middleware e cloud computing
  • 9.
    Aplicações ● Data syndication (como é feito com RSS e Atom feeds) ● VoIP ● Serviços de identificação (por exemplo com OpenID, ou OAuth) (...) ● [Use a sua imaginação!]
  • 10.
  • 11.
  • 12.
  • 13.
    Primitivas de comunicação ●Message ● Presence ● IQ
  • 14.
    <message/> ● Método pushbásico para transferir informação, transporte "fire-and-forget" <message from="madhatter@wonderland.lit/teaparty" to="alice@wonderland.lit" type="chat"> <body>Who are you?</body> <subject>Query</subject> </message>
  • 15.
    <presence/> ● Anuncia adisponibilidade de entidades na rede <presence from="alice@wonderland.lit/pda"> <show>xa</show> <status>down the rabbit hole!</status> </presence>
  • 16.
    <iq/> ● Usado nolugar de <message/> quando se quer garantir a entrega de informação ou obter uma resposta
  • 17.
    <iq/> Cliente Servidor <iq from="alice@wonderland.lit/pda" id="rr82a1z7" to="alice@wonderland.lit" type="get"> <query xmlns="jabber:iq:roster"/> </iq>
  • 18.
    <iq/> Servidor Cliente <iq from="alice@wonderland.lit" id="rr82a1z7" to="alice@wonderland.lit/pda" type="result"> <query xmlns="jabber:iq:roster"> <item jid="whiterabbit@wonderland.lit"/> <item jid="lory@wonderland.lit"/> <item jid="mouse@wonderland.lit"/> <item jid="sister@realworld.lit"/> </query> </iq>
  • 19.
  • 20.
    Pontos fortes ● Descentralizado:qualquer um pode rodar um servidor XMPP ● Padrão aberto ● Histórico: usado desde 1998, já tem muitas implementações de clientes, servidores, componentes, bibliotecas e suporte de empresas como Sun e Google ● Segurança: pode rodar em redes privadas; suporte para SASL e TLS na especificação; pode usar certificados digitais ● Flexibilidade e extensibilidade: permite adicionar funcionalidade através de XEPs
  • 21.
    Pontos fracos ● Podenão funcionar adequadamente quando o tamanho das mensagens é muito grande ● Transmissão de dados binários. Solução: transmissão fora de banda, usando mensagens para coordenação
  • 22.
    Referências ● Use XMPPto Create Your Own Google Talk Client. Sarath Lakshman. Revista Linux For You, Maio 2010. ● XMPP: The Definitive Guide. Peter Saint-Andre, Kevin Smith, Remko Tronçon. O’Reilly, 2009. ● Wikipedia: Extensible Messaging and Presence Protocol
  • 23.