Hlavní navigace

Jabber - komunikačný protokol

Peter Sivák 26. 7. 2004

Niet pochýb, že dobrá architektúra softvérového systému je kľúčom k jeho dlhej životnosti. Jednou z možných je architektúra orientovaná na služby. Táto bola znovunájdená po vytvorení štandardov pre webové služby. V súčasnosti najpoužívanejším komunikačným protokolom pre webové služby je http. V budúcnosti by ho mohol nahradiť instant messagingový systém jabber. V nasledujúcom článku sa pozrieme na možnosti, ktoré poskytuje programátorom.

Úvod

Jabber sa čoskoro stane štandardom podobne ako to bolo pri http, ftp a ďalších. Vo februári IETF (The Internet Engineering Task Force) schválila návrh protokolu XMPP (eXtensible Messaging and Presence Protocol) a v súčasnosti sa čaká na jeho vydanie v podobe RFC dokumentu. Označenie XMPP sa odporúča namiesto označenia Jabber-protokol.

Účelom tohoto seriálu je prezentovať Jabber z pohľadu programátora. Nie je mojím cielom popisovať samotný protokol (ak by o to bol záujem, nie som proti :)). Bez neho sa (zatial) zaobídeme, lebo existujú rôzne (aj open source) knižnice funkcii pre konkrétne programovacie jazyky. My si ukážeme zopár príkladov v jave (ostatné jazyky budú vyberané podľa vaších komentátov). V článkoch predpokladám iba schopnosť používať niektorý jabber IM klient a znalosti potrebné na rozbehanie jednoduchého programu v jave – hello world bude stačiť :).

V prvej časti si vytvoríme program, ktorý sa prihlási na jabber server, pošle správu, chvíľu ostane prihlásený a potom sa odhlási. Jeho aktivitu budeme sledovať v niektorom IM klientovi. Najskôr sa však pozrime na architektúru platformy Jabber.

Ako funguje jabber

O použití Jabberu na chatovanie bolo na Rootovi zverejnených niekoľko článkov. Keďže posledný vyšiel už viac ako pred rokom, tak najpr zopakujem základné veci. Jabber sa skladá zo serverov, na ktoré sa prihlasujú klienti.

Klient môže poslať správu inému klientovi. Spolu s cielovou adresou ju odovzdá serveru, na ktorom je prihlásený, a ten sa ju snaží doručiť. Ak je klient prihlásený na rovnakom serveri, tak mu ju server doručí. Ak je na inom serveri, tak ju pošle na ten server. Klient nemusí byť práve prihlásený – v takom prípade správa čaká na serveri.

Ďalšou vlastnosťou je, že si server ukladá informáciu o aktuálnom stave klienta (prihlásený, neprihlásený a i.). Klient sa môže prihlásiť na odber týchto informácii, a reagovať tak na zmeny stavu iného klienta.

Messaging v softvérových projektoch

Zistili sme teda, že Jabber doručuje správy medzi rôznymi entitami pripojenými na sieť. Keďže je to otvorený systém, entity nemusia byť len IM klienti. Môžu to byť aj iné aplikácie (procesy). Možno ho tak zaradiť medzi IPC (Inter Process Communication) techniky (ako napr. sokety, rúry a i.). Na rozdiel od spomínaných techník je tu priama podpora šifrovania – vyjednávanie bezpečnostných protokolov pomocou SASL alebo SSL/TLS a podpora unicode-u.

Rozmýšlate, že svoj nový systém rozdelíte na komponenty a komunikáciu medzi nimi založíte na XML, aby ste ho mohli ľahko rozširovať? Tak prečo nevyužiť jabber? Máte k dispozicii metódy na odosielanie správ – nie nahodná podobnosť s posielaním správ v objektovo orientovanom programovaní; prichádzajúce správy obsluhujete pomocou vami definovaných metód; podpora unicodu vám iste často pomôže; ssl jednoducho nastavíte na serveri a použijete vhodnú knižnicu a tiež sa už o to nemusíte starať. Ak ste zvyknutí používať protokol SOAP, tak nie je problém poslať SOAP-envelope ako správu a parsovať ju rovnakým spôsobom, ako ste to robili doteraz.

Smack: ideme programovať

Smack je Open Source (Apache licencia) XMPP klient pre programátorov v jave. Jediné, čo vyžaduje, je JDK vo verzii aspoň 1.2. Predpokladám, že JDK už máte nainštalovaný, a tak sa môžeme pustiť do sťahovania Smacku. V čase písania článku je aktuálna verzia 1.3.0.

Po rozpakovaní stiahnutého súboru v ňom nájdete dokumentáciu a tri jar-súbory: smack.jar je základom smacku a postačuje na jeho použitie, smackx.jar obsahuje podporu pre rozširujúce protokoly a smackx-debug.jar sa dá použiť pri debugovaní (popíšeme v niektorej z ďalších častí).

Najjednoduchšie je skopírovať všetky tri jar-súbory do adresára $JAVA_HOME/jre/lib/ex­t, kde $JAVA_HOME je adresár, v ktorom máte nainštalovaný JDK, alternatívne môžete do premennej prostredia CLASSPATH pridať názvy jar-súborov spolu s cestami k nim.

Príklad

Nasleduje komentovaný príklad programu, ktorý po prihlásení pošle správu druhému klientovi. Budete potrebovať dve kontá na niektorom jabber serveri. Pre jednoduchosť môžete využiť niektorí z verejných serverov. Nové konto si zaregistrujete pomocou jabber IM klienta.

Prvé konto bude používať program na prihlásenie. V príklade je to testsmack@jabber.sk. Vy samozrejme musíte použiť to, čo ste si zaregistrovali vy. Druhé konto (v programe xy@jabber.sk) slúži na sledovanie správania sa programu z IM klienta (ak používate jabber na chatovanie, tak môžete použiť svoje konto. Dôležité je pridanie kontaktu na prvé konto do rostera (kontakt list) IM klienta, aby sme videli, keď sa stane online.

Takže – preložte program a v IM klientovi sa prihláste pomocou svojho konta. Spustite program. V IM klientovi uvidíte, že sa program prihlásil a poslal vám správu. Po ubehnutí dvadsiatich sekúnd sa program odhlási.

import org.jivesoftware.smack.*;
// timer kôli oneskoreniu
import java.util.Timer;
import java.util.TimerTask;

public class Testsmack {
  XMPPConnection conn;
  Timer timer;

  public static void main(String[] arg) {
    Testsmack test = new Testsmack(20);
  }

  public Testsmack(int seconds) {
    try {
      // pripojenie k serveru
      conn = new XMPPConnection("jabber.sk");
      // prihlásenie
      conn.login("testsmack", "heslo");
      // naplánovanie odhlásenia o seconds sekúnd
      timer = new Timer();
      timer.schedule(new EndTest(), seconds * 1000);
      System.out.println("Test started");
      // odoslanie správy
      Chat newChat = conn.createChat("xy@jabber.sk");
      newChat.sendMessage("Test started");
    } catch (XMPPException ex) {
      // ukončenie po chybe pri komunikácii
      System.out.println("Error: " + ex.getMessage());
      System.exit(1);
    }
  }

  class EndTest extends TimerTask {
    // run sa vykoná po dvadsiatich sekundách
    public void run() {
      System.out.println("Time's up");
      System.exit(0);
    }
  }
}

To je na dnes všetko. Nabudúce trochu nazrieme pod vrstvu, ktorú nám ponúka smack, a ukážeme si, ako v skutočnosti vyzerajú dáta, ktoré prúdia medzi klientom a serverom.

Našli jste v článku chybu?

22. 9. 2006 19:03

reakcia (neregistrovaný)
tss, brainfuck je pre male deti :-) ale citali ste uz nejake zdrojaky vo whitespace language ? :-)))

1. 8. 2004 0:48

majo (neregistrovaný)

Hmm...

Ako viete, ze to nerobi napriklad apache, XFree86, lftp, mc a co ja viem, ake programy mate este nainstalovane? Pochybujem, ze si prechadzate zdrojaky vsetkych programov.



Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

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

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

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

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

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

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

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

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

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

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

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

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

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

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

Horní cesty dýchací. Zkuste fytofarmaka

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

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