Reading time: 5 – 8 minutes
Definici贸
XMPP (Extensible Messaging and Presence Protocol) 茅s un protocol est脿ndard i obert que es basa en l’intercanvi de missatges XML. Inicialment va ser concebut per implementar xarxes de missatgeria instant脿nea (IM) per貌 actualment s’usa per un ventall de funcionalitats molt m茅s ampli. Qualsevol aplicaci贸 que necessiti un sistema de missatges entre diferents m貌duls distribuits 茅s sensible a usar XMPP per ntercanviar missatges usant aquesta tecnologia com a middleware. Potser les eines m茅s conegudes que usen XMPP com a middleware s贸n Jabber, GTalk i les funcions de videoconfer猫ncia i audioconfer猫ncia de la mateixa Google.
Les funcionalitats que ens ofereix el protocol s贸n realment amplies i potents:
- Rudund脿ncia
- Escalavilitat
- No calen VPNs per accedir al serveis dins d’una xarxa amb NAT
- Suport SSL i Certificats
- Backends on es guarden usuaris: MySQL, LDAP, etc.
- Extensible (usa el que s’anomenen XEP)
- BOSH permet usar XMPP sobre HTTP, cosa que per disseny del protol XMPP seria un problema.
Glossari
- JID: els nodes d’una xarxa XMPP s’identifiquen a trav茅s d’aquest identificador, que 茅s de la forma: user@domain/resource (exemple: miquel@servidor.cat/im). Tractament dels JID:
- user@example.com – conegut com a JID
- user@example.com/desktop – conegut com a JID o full JID
- Stanza: els missatges XML que s’intercanvien entre un servidor XMPP i un client s’anomenen Stanzas.聽 Hi ha tres tipus d’stanzas:
- Messages: transporten informaci贸 entre nodes, els missatges es poden organitzar en threads. N’hi ha de diferents tipus:
- normal
- chat
- groupchat
- headline
- error
- Presence: serveixen per informar de la dipsonibilitat d’un recurs (online/offline):
- away
- do not disturb
- extended away
- free for chat
- IQ Stanza (info query): similar a un HTTP GET/POST/PUT, serveix per demanar informacions concretes a un node. Ideals per extendre el protocol. Per exemple, les IQ s’usen per saber quins recursos (usuaris) estan connectats a un canal de xat. N’hi ha de tres tipus:
- get: demanen informaci贸 (HTTP GET)
- set: proveeixen informaci贸 (HTTP POST/PUT)
- result: retornen informaci贸 requerida o confirmen que s’ha acceptat una comanda ‘set’.
- Messages: transporten informaci贸 entre nodes, els missatges es poden organitzar en threads. N’hi ha de diferents tipus:
- Extensibility: per tal de que sigui simple extendre el protocol, les stanzas suporten namespaces i qualsevol element XML d’una stanza es pot usar com un payload, per transportar: XHTML tags, Atom feeds, XML-RPCs, etc.
- Roster: llista de persones que participen en un event.
- Presence subscriptions: els recursos d’una xarxa (sovint els usuaris) poden subscriures a altres recursos (altres usuaris) per tal de saber si estan o no disponibles en cada moment.
- Asincronisme: la gr脿cia del XMPP respecte altres protocols com HTTP 茅s que es tracta d’un protocol as铆ncron, o sigui, que les connexions s’estableixen durant molt de temps i en qualsevol moment el servidor i/o el client poden enviar i rebre stanzas a trav茅s d’aquest canal. Els protocols HTTP estableixen connexions relativament curtes on sovint nom茅s hi ha una petici贸 i una resposta despr茅s es tanca la connexi贸.
Polling vs PubSub
Aquest 茅s el gran parigma de les estructures client servidor actuals, sovint els servidors tenen informacions que s贸n pels seus clients. Per貌 per disseny els servidors no podenen connectar amb els seus clients i han d’esperar a que aquests es connectin per donar-los la informaci贸 que necessiten. Aix貌 dona lloc al que coneixem com a polling, o sigui, que els clients peri贸dicament han d’anar connectant als servidors per saber si tenen quelcom nou per ells. Un bon exemple per entendre aix貌 茅s els servidors POP3 els servidors tenen una serie de correus enmagatzemats a l’espera que els clients a trav茅s del seu MUA es connectin per descarregar-se el correu.
Doncs b茅 en una xarxa XMPP, els clients es troven connectats al servidor en tot moment i tenen establer un canal permanent (real o virtual) entre clients i servidors. Per tant, l’intercanvi d’informaci贸 茅s bidireccional i qualsevol d’ambdues parts port enviar i rebre stanzas sense haber d’establir un nou canal, sin贸 que aprofiten el que ja tenen. PubSub 茅s la capacitat que tenen els recursos d’XMPP (clients d’XMPP) de subscriures i publicar qualsevol informaci贸, la possibilitat de subscriures a una informaci贸 permet que cada cop que el servidor t茅 una informaci贸 d’aquell tipus l’enviar脿 directament al client sense que aquest l’hagi de demanar. Un exemple per entendre millor el PubSub seria el que fan els usuaris al unir-se a un canal de xat; o sigui, informen al servidor que volen rebre qualsevol informaci贸 que es publiqui al canal i el servidor quan alg煤n usuari publica una nova informaci贸 al canal l’envia autom脿ticament a la resta d’usuaris.
Com 茅s f脿cil imaginar XMPP ens dona usa serie d’avantatges per tota una serie d’aplicacions que altres protocols no poden, potser la m茅s poderosa 茅s la que es tracta aqu铆. Donant un cop d’ull als pros i contres:
Pros (PubSub > Polling)
- Intercanvi bidireccional d’informaci贸, no cal establir VPNs ni altres sistemes similars perqu猫 hi hagi acc茅s transparent entre servidors i clients.
- Optimitzaci贸 del canal, no es malgasta ampla de banda fent preguntes per saber si hi ha algo nou, directament rebem les novetats.
Contres (PubSub < Polling)
- Cal mantenir el canal establert, de forma real o virtual, aix貌 no sempre 茅s possible o senzill. Per aix貌 apareixen t猫cniques/protocols com BOSH per permetre-ho.
- XMPP no esta optimitzat per intercanviar grans volums d’informaci贸.
La extenci贸 m茅s coneguda: Jingle
脡s una extenci贸 d’XMPP que permet enviar missatges de senyalitzaci贸 entre recursos (clients) d’aplicacions multim猫dia interactives com veu o video. Va ser dissenyat per Google i la XMPP Standards Foundation. El contenigut multim猫dia s’envia a trav茅s d’RTP(Real-time Transport Protocol) amb ICE(Interactive Connectivity Establishment) per tal de poder traspassar els NAT(Network Address Translation).
Fonts
Wikipedia:
Web:
Presentaci贸:
- XMPP 101 – FOSDEM (Free and Open Source Software Developers’ European Meeting)