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

Post on 20-Jul-2020

4 views 0 download

Transcript of Komunikácia medzi rôznymi Java (i neJava)...

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