Hlavní navigace

Jabber - komunikačný protokol (8)

Peter Sivák

Existuje veľa spôsobov, ako vytvoriť vzdialené volanie procedúr (RPC). Zrejme tým najjednoduchším je použitie XML-RPC. A práve jeho kombinácia s XMPP bude témou poslednej časti tohto seriálu.

Volania procedúr sú súčasťou takmer každého softvérového systému. Logickým rozšírením volania procedúr na jednom počítači sú vzdialené volania procedúr. Pomocou nich môže program využívať procedúry, ktoré bežia na inom počítači. Nevýhodou vzdialeného volania je samozrejme pomalšie spracovanie.

Procedúra má svoj názov, parametre a návratovú hodnotu. Názov a parametre sa najprv musia preložiť do formátu, ktorému rozumie vzdialený počítač. Takýchto formátov je viac – od jednoduchchého XML-RPC, cez zložitejší SOAP, až po komplexné poňatie v technológii CORBA.

Vo svete XML sa najčastejšie používa XML-RPC a SOAP, pričom SOAP poskytuje niekoľko zaujímavých vlastností navyše oproti XML-RPC. Sú to napr. pomenované štruktúry a polia, vytváranie vlastných dátových typov a používanie rôznych znakových sád. XML-RPC má na druhej strane veľmi jednoduchú (a krátku) špecifikáciu. XML-RPC vytvorili vývojari v UserLand Software, Inc. a SOAP pochádza z World Wide Web Konzorcia (W3C).

SOAP aj XML-RPC opisujú štruktúru odosielaných dát. Na prenos používajú najčastejšie protokol HTTP. Viacerým vývojárom však vlastnosti HTTP nepostačujú a snažia sa experimentovať s inými transportnými protokolmi. Keďže RPC je založené na odosielaní správ (klient pošle požiadavku a vráti sa odpoveď), vhodnými kandidátmi na prenosový protokol sú rôzne messagingové protokoly. Rozšírenie XMPP o XML-RPC je už schválené. SOAP pomocou XMPP sa ešte diskutuje a protokol je zatial experimentálny. V ďalšom texte si opíšeme XML-RPC a jeho použitie s XMPP bližšie.

XML-RPC

XML-RPC používa element <methodCall/> na volanie vzdialenej procedúry a <methodResponse/> na vrátenie výsledku. Napr. volanie procedúry, ktorá vracia čítanosť článku, by mohlo vyzerať takto:

<methodCall>
  <methodName>article.getHitCount</methodName>
  <params>
    <param>
      <value><i4>2316</i4></value>

    </param>
  </params>
</methodCall>

Volanie procedúry obsahuje jej názov a parametre (v tomto prípade číslo článku). Parameter má priradený typ. Ak by nemal, tak sa implicitne predpokladá reťazec. XML-RPC používa tieto jednoduché typy:

  • <i4> alebo <int> pre 32bitové celé číslo so znamienkom
  • <boolean>
  • <string>
  • <double>
  • <dateTime.iso8601> pre dátum/čas vo formáte ISO 8601
  • <base64> je formát na zakódovanie binárnych dát, tak aby mohli byť prenášané v XML

Zo zložených dátových typov sa v XML-RPC využívajú iba štruktúry a polia. Nevýhodou je, že sa nedajú pomenovať a rozlišujú sa len podľa poradia medzi parametrami. Štruktúry môžu obsahovať ďalšie štruktúry.

<struct>
  <member>
    <name>Name</name>
    <value><string>Jabber - komunikačný protokol</string></value>
    </member>
  <member>
    <name>Part</name>
    <value><i4>8</i4></value>
    </member>
</struct>

<array>
  <data>
    <value>Hardware</value>
    <value>Software</value>
    <value>Internet</value>
    <value>Bezpečnost</value>
  </data>
</array> 

Nasleduje príklad odoslania návratovej hodnoty v elemente <methodResponse/>

<methodResponse>
  <params>

    <param>
      <value><i4>1896</i4></value>
    </param>
  </params>
</methodResponse>

XML-RPC pomocou XMPP

XMPP používa na prenos XML-RPC požiadaviek elemet <iq/> typu „set“. Odpovede sa odosielajú v <iq/> elemente typu "result. XMPP streamy používajú UTF-8 – predpokladá sa teda, že aj dáta v XML-RPC sú takto kódované.

<iq type='set' to='...' id='1'>

  <query xmlns='jabber:iq:rpc'>
    <methodCall>
      ...
    </methodCall>
  </query>
</iq>

<iq type='result' to='...'
         from='...' id='1'>

  <query xmlns='jabber:iq:rpc'>
    <methodResponse>
      ...
    </methodResponse>
  </query>
</iq>

Implementácia XML-RPC pomocou XMPP v Perle je v triedach Jabber::RPC::Client a Jabber::RPC::Ser­ver, ktoré sú prístupné cez archív CPAN. Vytvorenie RPC servera znamená len vytvorenie inštancie spomínanej triedy a prepojenie s Perlovou procedúrou. Príklad je tu.

Na vytvorenie klienta treba zadať adresu XMPP servera, autentizačné údaje a JID RPC servera, ktorému budeme posielať volanie procedúry. Následne zavoláme procedúru a výsledok vypíšeme. Tu je príklad:

use Jabber::RPC::Client;

# Pripojenie sa na XMPP server
my $client = new Jabber::RPC::Client(
  server    => 'jabber.sk',
  identauth => 'user:password',
  endpoint  => 'jrpc.server.sk/rpc-server',
);

# vzdialené volanie procedúry (RPC)
my $result = $client->call('article.getHitCount', 2316);
print $result, "\n";

Záver

XML-RPC ponúka jeden z najjednoduchších spôsobov volania procedúry bežiacej na inom počítači. Vlastnosti XMPP ako smerovanie správ a jednoduché nastavenie šifrovanie (SSL) ho vhodne dopĺňajú.

Toto je zároveň aj koniec seriálu o protokole XMPP a jeho rozšíreniach. Jeho cielom bolo popísať Jabber ako komunikačnú platformu vhodnú na vytváranie aplikácii, ktoré vyžadujú distribuovaný prístup.

Našli jste v článku chybu?

14. 9. 2004 20:43

Pihhan (neregistrovaný)

Díky za pěkný seriál. Sice to bylo v jazyku, který já osobně asi nikdy nepoužiju, ale základy v něm byly asi přehlednější než v kterémkoliv jiném.
Trochu mi ale chybí nějaké drobnůstky a vychytávky, jako jsou například jabber:iq:browse, nebo discovery protokol. Chápu že nejsou definovány jako součást protokolu, ale pouze jako doporučení, nicméně bez nich se obávám že by jabber moc lidí nepoužívalo. Sice jsou to jenom návrhy JEP, ale jsou docela zajímavé a nabízejí věci které podobným protokolů…

13. 9. 2004 11:13

Peter Sivák (neregistrovaný)

Ano, XML streamy su vzdy UTF-8. XML-RPC je specifikovane volnejsie. Tam znakova sada zavisi od toho co sa definuje v XML hlavicke. Ale ak sa pouzije XML-RPC v XMPP streame, tak aj data v XML-RPC musia byt v UTF-8 ako cely stream.

XML-RPC serverom moze byt XMPP server aj klient aj komponenta (sluzba). Vsetko co ma vlastny JID. Teda napr. aj klient v diskusnej skupine.



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

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

R2B2 a Hybrid uzavřely partnerství

120na80.cz: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

DigiZone.cz: V Plzni odstartovalo Radio 1

V Plzni odstartovalo Radio 1

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

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

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

Vitalia.cz: Nejlepší obranou při nachlazení je útok

Nejlepší obranou při nachlazení je útok

Vitalia.cz: Test na HIV je zdarma i za pět set

Test na HIV je zdarma i za pět set

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

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

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

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

Co všechno ovlivňuje ženskou plodnost?

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

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

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

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: Levný tarif pro Brno nebude, je to kartel

Levný tarif pro Brno nebude, je to kartel

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

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

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

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

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky