25
Komunikácia medzi rôznymi Java (i neJava) aplikáciami Už vieme: čítať z, zapisovať do textového alebo binárneho súboru (streams), komunikovať medzi výpočtovými vláknami cez zdieľanú pamäť = premenné, synchronizovať prístup k nim, spusiť program, ktorý pošle server (JNQL) Dnes: Problém komunikujúcich aplikácii Riešenie v Jave (sockety a ďalšie) Zdroj a literatúra: Java Networking Tutorial Prémia: Využitie sieťovej komunikácie na konkrétnom príklade

Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Komunikácia medzi rôznymi Java (i neJava) aplikáciami

Už vieme:čítať z, zapisovať do textového alebo binárneho súboru (streams),

komunikovať medzi výpočtovými vláknami cez zdieľanú pamäť = premenné, synchronizovať prístup k nim, spusiť program, ktorý pošle server (JNQL)

Dnes:• Problém komunikujúcich aplikácii• Riešenie v Jave (sockety a ďalšie)

Zdroj a literatúra:• Java Networking Tutorial

Prémia: • Využitie sieťovej komunikácie na konkrétnom príklade

Page 2: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Aplikácie si vymieňajú údaje• Už poznáme rôzne spôsoby výmeny informácií Linux: find / -print | grep README (pipes) -> musí dopredu používateľ nastaviť kto s kým Cez súbory: jedna app zapíše, druhá prečíta -> trochu problém zistiť, či „už“ treba čítať Databáza: výhoda – jednotný dotazovací jazyk SQL

-> rovnaký problém a vyžaduje admina, aby ju vopred pripravil Rôzne iné – napr. softvérová zbernica D-Bus v Linuxe

Teoreticky poznáte aj: počítačové siete – viacvrstvý model, my sa teraz nachádzame na horných vrstvách OSI Modelu...

Page 3: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Aplikácie si vymieňajú údaje

Page 4: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Rôzne spôsoby prepájania počítačov

• Sériový port• Paralelný port• Telefónny modem• Token ring• Ethernet• BT

Half-duplex: naraz iba jeden hovoríFull-duplex: hovoria naraz, aj tak sa

počujú

Prepojenie na úrovni jednoduchej

výmeny dát (data link layer)

Page 5: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Rôzne spôsoby prepájania počítačov

V okamihu keď sieť narastie a je potreba doručovať dáta do konkrétneho cieľa

v sieti, kde prepojených veľa uzlov -> potrebujeme adresy a „doručovací mechanizmus“ - protokol

Network layer - Logické adresy (IP)

Výpadky spojenia po ceste, udržiavanie nadviazaného spojenia, potvrdenie doručenia, oprava chýb po ceste, ...

Transport layer - TCP

Keďže by systém nevedel, ktoré informácie, čo prídu odkladať, k úspešnému doručeniu dôjde, iba ak na dáta niekto čaká, Výsledok:

architektúra CLIENT – SERVER

Page 6: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

CLIENT a SERVER v TCP/IP- client môže poslať údaje až keď server bezí a očakáva ich

(listen)

- po prijatí clientovej požiadavky na spojenie so serverom sa vytvorí nové spojenie, cez ktoré môže client odoslať to, čo chcel serveru, server cez to isté spojenie môže odpovedať, komunikácia môže trvať aj dlhú dobu a programy si môžu údaje posieľať oboma smermi, dokiaľ

potrebujú – kým sa spojenie nezavrie, potom server znovu čaká na spojenie (listen)

- pekné je, že programy môžu bežať aj na tom istom počítači – ľahké testovanie: IP+PORT - rôzne porty na tom istom IP

- jeden počítač/program môže fungovať aj ako server a zároveň ako client, ak je to na niečo dobré...

Page 7: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Rola CLIENT a SERVER

Príklad:

o 2h neskôr:

Page 8: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

CLIENT a SERVER v TCP/IP

Často nejde o komunikáciu iba 2 programov, ale istú službu, napr. informácie o počasí, možnosť zadať operácie na burze cenných papierov a pod.

Potom: 1 počítač je server, prípaja sa na neho naraz viacero rôznych klientov

Problém: ako zvládať súčasne prichádzajúce viacnásobné požiadavky a súčasnú komunikáciu s viacerými klientami?

Dosť úvodu, ako je na tom Java?

Page 9: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Java a InternetJava vznikla v čase začiatku masového rozšírenia InternetuSnaha zabudovať sieťovanie pevne do jazyka -> Java APPLET

APPLET: javovský program, ktorý browser downloadol z webového servera, odkiaľ stránka pochádza, beží v Java plugine v prehliadači

Tento kód môže ťahať ďalšie informácie zo siete: obrázky, súbory...

Problémy: - často nie je nainštalovaný alebo dovolený Java plugin - nedostatočné rozšírenie technológie - potenciálne riziko spúšťať kód, ktorý prešiel cez nezabezpečenú linku a neznáme uzly v sieti -> podpisovanie, zvyšovanie bezpečnosti

Výsledok: dnes takmer nepoužiteľná a nepoužívaná technológia, vytlačená Javascriptom+HTML5, pozri tiež: JNLP - minule

Page 10: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Java a InternetNáš pôvodný problém je iný:

App2 má svoju adresu IP+PORT: - povie operačnému systému, že chce počúvať (listen) - keď príde spojenie, rozhodne sa ho prijať alebo nie

(accept) - a vytvorí sa komunikačný kanál obojstranný a symetrický (zrazu je jedno kto bol server a kto client, kanál funguje celkom rovnako pre obe strany)

V Java API listen+accept – jedno volanie (zjednodušenie)

App1 pozná IP+PORT servera

Page 11: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Talk

Page 12: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Talk

Page 13: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Talk

Page 14: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Java a InternetObe aplikácie môžu byť vytvorené v ľubovoľnom programovacom jazyku – komunikácia prebieha vďaka službámOperačného systému: JAVA nerobí skoro nič, len prekladá volania aplikácie na volaní služieb OS, takže:

Výhoda: JAVA API vytvára platformovo nezávislú abstrakciua rovnaký program pobeží všade (nie celkom prípad C++: windows vs. unix)

Page 15: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Java a InternetDôležitá informácia:

po úspešnom accept je možné hneď znovu volať accept na ten istý ServerSocket a čakať na (a aj vytvoriť) druhé spojenie s iným clientom, hoci komunikácia s 1. klientom stále prebieha!

Ako to riešiť v kóde?

prirodzený spôsob: každý pripojený client spôsobí na serveri vytvorenie nového threadu

Page 16: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Multithreaded Server

Príklad: generátor náhodných čísel :-)

Page 17: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Efektívny server s 1 threadomŠtandardné riešenie v unixe: select()Jedno výpočtové vlákno čaká na zmenu stavu (napríklad

príchod nových dát) na viacerých kanáloch (určených cez ich file handle) naraz

Windows: WaitForMultipleObjects()

Java: až od verzie 1.4 (rok 2002): celá nová knižnica súčasťou JAVA API: java.nio

zmena filozofie k I/O:

Stream -> Channel 1 Byte -> Buffer

(podrobnejšie na kurze JAVA EE)

Page 18: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Efektívny server s 1 threadomŠtandardné riešenie v unixe: select()Jedno výpočtové vlákno čaká na zmenu stavu (napríklad

príchod nových dát) na viacerých kanáloch (určených cez ich file handle) naraz

Windows: WaitForMultipleObjects()

Java: až od verzie 1.4 (rok 2002): celá nová knižnica súčasťou JAVA API: java.nio

zmena filozofie k I/O:

Stream -> Channel 1 Byte -> Buffer

(podrobnejšie na kurze JAVA EE)

Page 19: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Väčší príklad komunikácie cez Sockety: talk pre dvoch

Vymieňajú si pakety v dohodnutom formáte

= komunikačný protokol – každá komunikácia ho potrebuje

Každý paket má tento formát:

length type description----------------------------------------------------------------------------1 byte low byte of data length (X)1 byte high byte of data length (Y) DATA_LENGTH byte[] data (string message)

DATA_LENGTH = X + Y*256

Mohli by sme ho rozšíriť, napr. o typ paketu: správa/prihlásenie + meno/odhlásenie http://dai.fmph.uniba.sk/courses/java2/net/

Page 20: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Väčší príklad komunikácie cez Sockety: tinyDC

Výpočtový server, ktorý prijíma úlohy, spravuje N výpočtovýchuzlov, ktoré výpočet realizujú, viacero klientov posiela svoje jobyskladajúce sa z viacerých taskov

Page 21: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Ďalšie spôsoby komunikácie aplikácií

Zložitejšie technológie s rôznymi zaujímavými vlastnosťami,službami, bezpečnostnými vrstvami...

Väčšinou sa týkajú aplikácií, ktoré bežia na

aplikačnom serveri

Čo je aplikačný server?

Page 22: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Filozofia webových aplikácii

User click –> PREHLIADAČ SKRIPT – – – DB

znovu rýchlo vygeneruje prekreslí stránku na základe stránku požiadavky, DB a stavu (session) a hneď skončí

Prípadne:

PREHLIADAČ SKRIPT – – – DB

aktualizuje rýchlo vygeneruje dáta Javascript (XML, JSON, TEXT) a hneď skončí

request

stránka

ajax request

dáta

Page 23: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Tradičný model aplikácií (newebových)

aplikácia business layer data -layer

GUI

presentation DBLayer

množstvo v pamäti spracovávaných Lenže: údajov špecifických pre aktuálnu dnešná platforma činnosť používateľa, ale NIE JE to je Internet program, ktorý sa spustí, bežíGUI je realizované zlomok sekundy a hneď skončí!

v prehliadači – tradičný model web aplikácií so skriptami NESTAČÍ

Page 24: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Riešenie: Aplikačný server

Aplikácia beží na serveri, v pamäti má množstvo objektov - niektoré majú platnosť iba 1 requestu - alebo celej používateľskej session - alebo sú spoločné pre všetkých používateľov aplikácie

ale sú to “obyčajné” javovské objekty, ich životnosť – vytváranie a rušenie riadi aplikačný server Glassfish / Tomcat / Weblogic / ...

browser client1 APP1 APP3 browser client2 APP2 browser client3

Page 25: Komunikácia medzi rôznymi Java (i neJava) aplikáciamidai.fmph.uniba.sk/courses/JAVA/Prednasky/siete_java.pdf · presentation DB Layer množstvo v pamäti spracovávaných Lenže:

Aplikácie v aplikačnom serveri komunikujú:

JAVA MESSAGING SERVICE (JMS) - schránky - fronty

WEB SERVICES - soap (JAX-WS) - restful requests (JAX-RS)

pre inšpiráciu: JMS: http://dai.fmph.uniba.sk/courses/java2/about_jms_sk.html JAX-WS: http://dai.fmph.uniba.sk/courses/java2/jax-ws.html