Hlavní navigace

Jabber - komunikačný protokol (2)

Peter Sivák

Dnes si ukážeme, ako v skutočnosti prebieha komunikácia medzi jabber serverom a klientom. Vysvetlíme si tiež spôsob identifikácie entít a rozdiel medzi základnými typmi správ.

V predošlej časti sme si ukázali jednoduchý príklad na odoslanie správy cez jabber. Využili sme programovacie rozhranie Smack. Teraz sa pozrieme bližšie na vlastnosti protokolu XMPP, ktoré sú nevyhnutné na zvládnutie práce s knižnicou Smack. Uvedieme si tiež príklady komunikácie medzi klientom a serverom.

XMPP je relatívne jednoduchý protokol, ktorý vďaka svojej rozšíriteľnosti poskytuje veľa možností použitia. Okrem instant messsagingu môže slúžiť ako prenosový protokol pre XML-RPC a webové služby (SOAP), pre notifikáciu o nových článkoch (content syndication) alebo tiež pre hry.

Jabber identifikátory

Všetky entity sú v systéme Jabber identifikované pomocou Jabber ID (JID). Entita môže byť používateľ prihlásený pomocou svojho klienta, komponent alebo proces. Entita je aj jabber server a služby, ktoré poskytuje.

JID vyzerá napríklad takto:

meno@jabber.sk/work

Tento JID označuje používateľa „meno“ zo servera jabber.sk. Posledná časť JIDu oddelená lomítkom sa nazýva zdroj (resource). Koncept zdroja umožňuje, aby bol ten istý používateľ prihlásený na viacerých miestach naraz – doma, v práci, prípadne pomocou svojho mobilného zariadenia. Ak v odoslanej správe neuvedieme zdroj, tak bude správa doručená na implicitné zariadenie určené používateľom. Ak je zariadení viac, tak sa rozhoduje podľa priority. Priorita môže byť priradená každému zdroju – je to celé kladné číslo. Entita ju môže meniť počas pripojenia. Čím je väčšie číslo, tým je vyššia priorita. Ak majú zdroje rovnakú prioritu, tak vyhráva ten, ktorý sa prihlásil naposledy.

JID musí obsahovať meno servera (hostname) a môže obsahovať meno používateľa a zdroj. Malá zaujímavosť je, že pokial meno používateľa je case-insensitive, tak názov zdroja je case-sensitive. Používatel root sa môže prihlasovať tiež ako ROOT a pod.

Komunikácia

Protokol XMPP je založený na XML. Komunikácia prebieha cez TCP spojenie. Celá komunikácia, ktorá prebehla medzi dvomi koncovými bodmi, vytvára dva XML dokumenty. Jeden v smere od klienta k serveru a druhý opačne.

Server čaká na porte 5222 na prihlásenie klienta. Po vytvorení TCP spojenia sa klient ohlási zaslaním XML deklarácie a koreňového tagu:

<?xml version="1.0"?>
<stream:stream
  xmlns:stream="http://etherx.jabber.org/streams"
  to="jabber.sk"
  xmlns="jabber:client">

Server odpovie podobne:

<?xml version="1.0"?>
<stream:stream
  xmlns:stream='http://etherx.jabber.org/streams'
  id='1461777714'
  xmlns='jabber:client'
  from='jabber.sk'>

Po vytvorení XML streamu sa klient musí autentizovať, aby mohol využívať služby servera. Jabber umožňuje niekoľko spôsobov odosielania hesla vrátane hashovacej metódy SHA1. Na ukážku je tu odoslanie nezakódovaného hes­la:

<iq type="set" id="auth_2" to="jabber.sk">

  <query xmlns="jabber:iq:auth">
    <username>psivak</username>
    <password>heslo</password>
    <resource>work</resource>

  </query>
</iq>

Odpoveď servera po úspešnej autentizácii:

<iq from="jabber.sk" id='auth_2' type='result'/>

Nasleduje samotné posielanie správ a informácii o dostupnosti používateľa. Na to sú určené tri elementy: <message/>,<pre­sence/> a <iq/>. Tie si popíšeme bližšie. Komunikácia sa končí odoslaním ukončovacieho tagu (v obidvoch smeroch jeden):

</stream:stream>

Element Message

XMPP definuje päť rôznych typov správ. Typ „normal“ je správa, pri ktorej sa neočakáva bezprostredná odpoveď – podobne ako email. Správa typu „chat“ je zvyčajne časťou rozhovoru a predpokladá sa zobrazenie v okne spolu s ostatnými časťami komunikácie. Správa typu „groupchat“ sa používa pri konferenčnom rozhovore. Štvrtým typom je typ „headline“, ktorý nesie názov článku spolu s URL a popisom. Posledným typom je chybová správa.

Správa môže vyzerať napr. takto:

<message to='psivak@jabber.sk' from='xy@jabber.cz/work'>
  <subject>test</subject>
  <body>Hello Jabber!</body>

</message>

Text formátovaný v XHTML môže byť tiež odosielaný v </message>:

<message id="3" to="psivak@jabber.sk" type="chat">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <body>

      Hello Jabber!
    </body>
  </html>
  <body>Použitie HTML</body>
</message>

Element Presence

Element <presence/> sa používa, keď entita oznamuje serveru svoju dostupnosť. Zmenu v dostupnosti entity sa server snaží oznámiť všetkým prihláseným entitám, ktoré sú prihlásené na odber týchto správ. Príklad:

<presence>
  <show>xa</show>
  <status>Som na rybách.</status>

  <priority>5</priority>
</presence>

„xa“ znamená „extended away“. Je to typ dostupnosti najbližší k „unavailable“ (nedostupný). Ďalšie možnosti sú away, chat, dnd a normal. Priorita je číslo, o ktorom sme hovorili vyššie.

IQ element

Posledným používaným elementom je element IQ. IQ znamená info/query. Je to mechanizmus podobný modelu request/response protokolu HTTP, ktorý umožňuje odosielanie informácii, ktoré vyžadujú potvrdenie. Sú štyri stavy, v ktorých môže byť IQ komunikácia – get, set, result a error. IQ element typu get odosiela entita, ktorá chce získať informácie od inej entity. Ak entita informácie odosiela, tak by mala byť nastavená na typ set. V prípade, že get alebo set požiavka bola vykonaná úspešne, vráti sa IQ správa typu „result“. Pri chybe sa vráti IQ typu „error“.

Príklad ukazuje žiadosť klienta o zaslanie obsahu rostera:

<iq id='roster_0' type='get'>
  <query xmlns='jabber:iq:roster'/>
</iq>

… a odpoveď servera:

<iq from="psivak@jabber.sk/Psi" type="result" id="roster_0" >
  <query xmlns="jabber:iq:roster">
    <item subscription="both" jid="testsmack@jabber.sk" />
  </query>
</iq> 

Záver

Dnešná časť poskytla stručný prehľad vlastností protokolu XMPP. V ďalších častiach sa vrátime k programovaniu a vytvoríme jednoduchú webovú službu, ktorá použije XMPP ako komunikačný protokol namiesto protokolu HTTP.

Našli jste v článku chybu?

5. 8. 2004 23:00

Martin Jindra (neregistrovaný)

>open source implementácie XMPP serverov a ich porovnanie (+ SSL)
...To dá hodně práce.

> použitie SOAP a XML-RPC cez XMPP.
...To zní zajímavě.

>2) nerád by som robil návod na vytvorenie IM klienta
...Souhasím.

Jinak jsem upřímně zvědavej na všechny díly.










5. 8. 2004 15:26

Peter Sivák (neregistrovaný)

Najbližšie témy budú: príklady použitia smacku; open source implementácie XMPP serverov a ich porovnanie (+ SSL); príklady v iných (hlavne interpretovaných) jazykoch; použitie SOAP a XML-RPC cez XMPP.
Ak by ste tu radi videli aj iné veci, stačí napísať.

XMPP je rozsiahly, ale 1) existujúce implementácie za ním zaostávajú a 2) nerád by som robil návod na vytvorenie IM klienta, ale radšej budem popisovať XMPP ako prostriedok na komunikáciu v distribuovaných systémoch.




DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

Vitalia.cz: To nejhorší při horečce u dětí: Febrilní křeče

To nejhorší při horečce u dětí: Febrilní křeče

Měšec.cz: Za palivo zaplatíte mobilem (TEST)

Za palivo zaplatíte mobilem (TEST)

Lupa.cz: Levný tarif pro Brno nebude, je to kartel

Levný tarif pro Brno nebude, je to kartel

Root.cz: Nová třída SD karet A1 s vysokým výkonem

Nová třída SD karet A1 s vysokým výkonem

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Podnikatel.cz: E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

Lupa.cz: Obchod budoucnosti je bez front, košíků i pokladen

Obchod budoucnosti je bez front, košíků i pokladen

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Vitalia.cz: Jak vybrat ořechy do cukroví a kde mají levné

Jak vybrat ořechy do cukroví a kde mají levné

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu