Svijet tekstualne komunikacije u stvarnom vremenu (po domaće, Instant Messaginga odnosno IM-a) prepun je različitih implementacija, servisa i providera. U Hrvatskoj je vjerojatno najrašireniji ICQ, no tu su još i MSN, Yahoo, AIM i mnogi drugi manje poznati i više opskurni (GaduGadu, SameTime, itd). Zajedničko svima njima je da su korisnici jednog servisa ograničeni na komunikaciju samo s korisnicima istog servisa – odnosno sustav je zatvoren. Zbog toga su multiprotokol klijenti poput Pidgina toliko popularni.
Jedan od protokola koji u posljednje vrijeme (zadnjih par godina) sve više dobija na popularnosti je XMPP, javnosti više poznat pod imenima Google Talk te Jabber. Upravo je Google najviše pridonio povećanju popularnosti ovog protokola – ako ste korisnik GMaila, ujedno imate i GoogleTalk korisnički račun sa istom adresom i lozinkom. No koja je točno razlika između ova tri naziva i zašto?
Sve je počelo sa Jabberom, koji je zamišljen kao IM sustav koji ne bi patio od problema zatvorenosti komercijalnih IM sustava. Jabber je zamišljen kao decentraliziran sustav u kojem svatko tko želi može podići Jabber server i povezati se sa drugima (nešto slično princip rada elektroničke pošte, ali bez njene urođene nesigurnosti), koristeći otvoreni i standardizirani protokol za komunikaciju. Jabberov protokol s vremenom je proglašen i pravim IETF standardom, te je promjenio ime u XMPP (Extensible Messaging and Presence Protocol).
Kad se Google odlučio baciti u IM vode, umjesto izmišljanja vlastitog protokola ili priklanjanja nekom od komercijalnih postojećih, odlučili su koristiti XMPP i proširiti ga funkcionalnostima specifičnima za GTalk. Dokumentacija o GTalk ekstenzijama javno je dostupna, što omogućuje drugim developerima da ih implementiraju u svojim klijentima.
Dakle, sam GTalk je centralizirani sustav (svi serveri su Googleovi), ali njegovi korisnici bez problema mogu komunicirati sa Jabber servera, koristeći zajednički protokol.
Spomenuo sam već da X u nazivu protokola označava ekstenzibilnost, a i da je Google napravio neke svoje ekstenzije nad protokolom. Mogućnost proširivanja i nadogradnje funkcionalnosti jedna je od najbitnijih značajki protokola.
Standardi i ekstenzije
Osnova XMPP-a je RFC 3290 – XMPP Core koji definira način spajanja klijenata i servera i razmjenu podataka. Ovaj dio XMPP-a uopće nema eksplicitne veze sa Instant Messagingom, nego može služiti u bilo kojoj situaciji kad server i klijent žele asinkrono razmjenjivati XML poruke (i dobar je komplement HTTP-u, koji je request-response based protokol).
Nad njega se nadovezuje RFC 3921 – XMPP IM koji se zapravo bavi IM-om. Ovaj RFC specificira listu kontakata (roster), stanje korisnika na sustavu (moj nespretan prijevod pojma presence, op. a.), načine pretplaćivanja korisnika na informacije o drugim korisnicima (presence subscription, ili narodski, dodavanje nekoga u kontakt listu), te na kraju i samu razmjenu poruka između korisnika (messaging).
Ova dva RFC-a čine osnovu XMPPa kao protokola za instant komunikaciju. Daljnje nadogradnje (kojih ima mnogo) nisu putem RFC-a (koji imaju prilično dug, formalan i zamoran put do usvajanja) nego tzv. XMPP Extension Protocol (XEP) dokumenata (koji imaju dug, formalan i zamoran put do usvajanja, ali ipak dinamičniji od RFC-a) Putem XEP-ova XMPP ima (ili može imati) podršku za bilo koju mogućnost koje nude drugi protokoli, a razrađeni mehanizam (capabilities) osigurava da klijenti različitih mogućnosti mogu normalno međusobno komunicirati (koristeći naravno samo one featureve koji su zajednički klijentima u igri).
Telefonija
Jedan od zanimljivijih XEP-ova je Jingle, standard za “iniciranje peer-to-peer media sjednica”, odnosno audio/video pozive. Pozivi putem GTalka (zasad samo audio) koriste upravo Jingle XEP. Kako je standard još u stalnom razvoju (uskoro bi trebao biti finaliziran), trenutno nekoliko XMPP klijenata podržavaju razne inačice draftova standarda, pa nisu uvijek međusobno kompatibilni (jednom kad se standard finalizira više neće biti tih problema). Jingle je složen tako da omogućuje relativno jednostavno povezivanje sa SIP protokolom (standard za VoIP), tako da već postoje gatewayi koji znaju pretvarati Jingle pozive u SIP pozive (a uz korištenje SIP-PSTN gatewaya, i u obične telefonske pozive).
(Micro)blogging i XMPP
Osim same instant komunikacije i telefonije, XMPP ima i drugih primjena. Jedna od ekstenzija (Publish-Subscribe) definira generički način objavljivanja događaja i pretplaćivanje na te objave i idealna je za slučajeve kad servis treba obavijestiti klijenta o nekom događaju. Trenutno se za takve stvari koristi HTTP pollanje (npr. upiti svakih nekoliko minuta) što opterećuje i server i klijenta, beskorisno troši bandwidth te naposlijetku uzrokuje i kašnjenje u notifikaciji o samom događaju (real-world scenario: twitter, pollanje rss feedova).
Korištenjem XMPP-a, klijent se pretplati na događaj i ne mora ništa dalje raditi. Kada se događaj stvarno i dogodi, server se brine da ga odmah obavijesti. Opcionalno, klijent može dalje koristiti HTTP za dohvaćanje novog stanja, ili slično. Primjerice kod RSS feedova, na ovaj način blogovi mogu obavjestiti readere/agregatore o novom postu, nakon čega reader može standardnim HTTP requestom dohvatiti novi sadržaj; na taj način requestovi se rade samo kad treba. Kod distribuirane microblogging platforme, sam sadržaj može se prenijeti u notifikaciji. Za ovakve stvari XMPP još nije u opće raširenoj upotrebi, ali razvoj na tom polju je vrlo aktivan.
Jabber vs. druge IM mreže
Nadam se da sam ovim postom uspio malo objasniti što je to XMPP, što sve može i kako stvari u njemu funkcioniraju. Trebate li ga koristiti? Teško je reći – XMPP je otvoren, raširen i dobro podržan službeni internet standard (ako vam ni to nije dosta, čitajte ovo), ali ako imate velik broj kontakata na nekoj zatvorenoj mreži zasigurno ih se ne želite odreći. Rješenje je koristiti multiprotokol klijent ili (ako ste stvarno zapeli) Jabber transporte, odnosno neslužbene gatewaye između Jabber i drugih mreža.
A ukoliko želite saznati još više o svemu ovome, posjetite Wikipediu te Jabber.org wiki.

Komentiranje zatvoreno.