Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Jabber - komunikačný protokol

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Ú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.

TIB2012

       

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.

Školení: SQL pro začátečníky

Kdo nezná jazyk SQL jako kdyby nebyl. Tak lze stručně charakterizovat dnešní význam SQL v IT. Pokud se chcete naučit tento jazyk, tak navštivte naše školení SQL. Školení je určené začátečníkům, a proto se začíná od skutečných základů.

Kromě samotného SQL se účastíci školení seznámí i se základy PostgreSQL, což je databáze, která se díky své shodě se standardem ANSI SQL a komfortem, který poskutuje svým uživatelům, zvlášť hodí pro výuku SQL.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,66

Přehled názorů

perl
Radek Kadner 26. 7. 2004 00:33
Nový
├ 
Re: perl
Marek Paška 26. 7. 2004 08:31
Nový
│
├ 
Re: perl
Pichi 26. 7. 2004 09:58
Nový
│
│
└ 
Re: perl
Tux 26. 7. 2004 16:34
Nový
│
└ 
Re: perl
Yeti 26. 7. 2004 17:36
Nový
└ 
Re: perl
mrak 26. 7. 2004 10:13
Nový
bez titulku
Mithrandir 26. 7. 2004 00:34
Nový
└ 
Re:
Jan Molič 26. 7. 2004 10:14
Nový
bez titulku
Radek Kadner 26. 7. 2004 00:36
Nový
bez titulku
debko 26. 7. 2004 01:09
Nový
├ 
Re:
ldx 26. 7. 2004 12:19
Nový
├ 
Re:
javes 26. 7. 2004 13:45
Nový
└ 
Re:
gmmns 26. 7. 2004 19:24
Nový
 
└ 
Re:
gmmns 26. 7. 2004 19:26
Nový
bez titulku
Tomi 26. 7. 2004 01:11
Nový
├ 
Re:
martin h 26. 7. 2004 07:27
Nový
│
└ 
Re:
Solvina 26. 7. 2004 16:27
Nový
│
 
└ 
Re:
gmmns 26. 7. 2004 20:46
Nový
│
 
 
└ 
Re:
Solvina 26. 7. 2004 22:27
Nový
└ 
Re:
Petr 26. 7. 2004 13:43
Nový
bez titulku
Marek Turnovec 26. 7. 2004 02:14
Nový
├ 
Re:
Hmmm 26. 7. 2004 08:48
Nový
└ 
Re: webové služby
Peter Sivák 26. 7. 2004 13:35
Nový
prakticka ukazka.
Hynek L. 26. 7. 2004 02:41
Nový
├ 
Re: prakticka ukazka.
martin h 26. 7. 2004 10:33
Nový
│
└ 
Re: prakticka ukazka.
hynek 26. 7. 2004 11:15
Nový
│
 
└ 
Re: prakticka ukazka.
martin h 26. 7. 2004 11:18
Nový
│
 
 
└ 
Re: prakticka ukazka.
hynek 26. 7. 2004 11:24
Nový
│
 
 
 
└ 
Re: prakticka ukazka.
Solvina 26. 7. 2004 16:30
Nový
│
 
 
 
 
└ 
Re: prakticka ukazka.
martin 27. 7. 2004 10:00
Nový
│
 
 
 
 
 
├ 
Re: prakticka ukazka.
Hynek 27. 7. 2004 13:46
Nový
│
 
 
 
 
 
└ 
Re: prakticka ukazka.
majo 1. 8. 2004 00:48
Nový
├ 
Re: prakticka ukazka.
Peter Sivák 26. 7. 2004 13:48
Nový
│
└ 
Re: prakticka ukazka.
hynek 26. 7. 2004 13:59
Nový
└ 
Jak rozjedu Java Webstart?
Ondřej Válek 28. 7. 2004 00:43
Nový
 
└ 
Re: Jak rozjedu Java Webstart?
Ondřej Válek 28. 7. 2004 01:59
Nový
 
 
└ 
Re: Jak rozjedu Java Webstart?
Peter Sivák 28. 7. 2004 12:11
Nový
Java, perl ,c atd.
b0dYn 26. 7. 2004 14:56
Nový
├ 
Re: Java, perl ,c atd.
gmmns 26. 7. 2004 19:16
Nový
│
└ 
Re: Java, perl ,c atd.
reakcia 22. 9. 2006 19:03
Nový
└ 
Re: Java, perl ,c atd.
nakej kurva dobrej programator 26. 7. 2004 23:21
Nový
Výber progr. jazykov
Peter Sivák 27. 7. 2004 11:51
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem