Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
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
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...
Aplikácie si vymieňajú údaje
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)
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
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é...
Rola CLIENT a SERVER
Príklad:
o 2h neskôr:
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?
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
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
Talk
Talk
Talk
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)
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
Multithreaded Server
Príklad: generátor náhodných čísel :-)
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)
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)
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/
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
Ď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?
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
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ČÍ
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
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