Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový kód je v

Podobné dokumenty
Úvod Virtuální kanál TCP Datagramová služba UDP URL TCP, UDP, URL. Fakulta elektrotechnická

Software pro vzdálenou laboratoř

Komunikace s automaty MICROPEL. správa systému lokální a vzdálený přístup do systému vizualizace, umístění souborů vizualizace

Webový server lapache

Od CGI k FastCGI. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Remote Method Invocation RMI

SMTPServer - Příručka

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

1 Uživatelská dokumentace

Rocrail. Nejprve: Obecný úvod. Instalace

Instalace a konfigurace web serveru. WA1 Martin Klíma

DUM 06 téma: Tvorba makra pomocí VBA

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server

ZAŘÍZENÍ PRO VZDÁLENÝ SBĚR A PŘENOS DAT FIRMWARE

OPC server pro RWP80. MC Control s.r.o. 20. února 2007

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Vlákna. První jednoduchý program s vlákny:

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Komunikační sokety. teorie a implementace v C#, C++ a Javě. Aleš Keprt Katedra informatiky UP duben 2006, revize květen 2007

Linux-příkazový řádek

Programátorská příručka

Algoritmy a datové struktury

Z. Kotala, P. Toman: Java ( Obsah )

Přehled příkazů pro CLI část aplikace Fits Header Modifier Jan Hlava

PROGRAMOVÁNÍ V SHELLU

Cvičení č. 2. Komunikace mezi procesy Program Hodiny. 4 body

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Připojení systémů CNC 8x9 DUAL do sítí pomocí protokolu TCP/IP (Platí od verze panelu 40.31)

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

java remote method invocation Kateřina Fricková, Matouš Jandek

Transformace digitalizovaného obrazu

Dokumentace k produktu IceWarp Notifikační nástroj

Patrol Management System 2.0

Schéma e-pošty. UA (User Agent) rozhraní pro uživatele MTA (Message Transfer Agent) zajišťuje dopravu dopisů. disk. odesilatel. fronta dopisů SMTP

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Vstupní požadavky, doporučení a metodické pokyny

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

ABRA POS PRINT SERVER

VISUAL BASIC. Práce se soubory

17. Projekt Trojúhelníky

TDP RPort 1.0. uživatelská příručka. 12. července 2007 Na slupi 2a, Praha 2

Co nabízí Telefonní linka Premium?

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Přístup k transportní vrstvě z vrstvy aplikační rozhraní služeb služby pro systémové aplikace, služby pro uživatelské aplikace DNS

Importy a exporty KLIENTSKÝ DOPLNĚK PRO PODPORU IMPORTŮ VERZE 3.2.0

Kapitola 1 Představení SIP telefonu

Ladění ovladačů pomocí virtuálního stroje...2 Úvod...2 Ladění ovladačů pomocí dvou fyzických počítačů...2 Ladění ovladačů pomocí jednoho fyzického

Instalace programu ProGEO

Java Message Service (JMS) Martin Ptáček, KOMIX s.r.o.

Použití programu WinProxy

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Střední odborná škola a Střední odborné učiliště, Hořovice

8 Třídy, objekty, metody, předávání argumentů metod

Implementace LL(1) překladů

Kerio IMAP Migration Tool

OBSAH. 1. Úvod Požadavky na SW vybavení... 3

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Knihovna EpsnetLib TXV první vydání září 2012 změny vyhrazeny

ČÁST 1. Základy 32bitového programování ve Windows

pozice výpočet hodnota součet je 255

v. 2425a Jak si na PC vypěstovat HTTP (WWW, Web) server a jak ho používat (snadno a rychle) by: Ing. Jan Steringa

Instalace produktu Ontopia. ver (open-source verze)

Zpracování dat v AVG backendech. Antonín Karásek Jarek Jarcec Čecho

TELEFONNí LiNKA PREMiUM PRŮVODCE NASTAVENíM SLuŽBY MEET-ME KONFERENCE

1. Instalace MySQL Serveru Konfigurace MySql Serveru Vytvoření struktury databáze...3

VPN tunel mezi zařízením ZyXEL ZyWALL a IPSec VPN klientem ZyXEL

Výpočet v módu jádro. - přerušení (od zařízení asynchronně) - výjimky - softvérové přerušení. v důsledku událostí

A p a c h e h t t p d Lukáš Zapletal lukas.zapletal@liberix.cz

Nastavení IP adresy a defaultní rychlosti CANu u převodníku ETH2CAN

Úvod do počítačových sítí

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

Internet Information Services (IIS) 6.0

Principy operačních systémů. Lekce 6: Synchronizace procesů

Django Urls, views, templates

Se vznikem internetu se můžeme na síťovou komunikaci v Javě (komunikace mezi více JVM) dívat dvěma pohledy-způsoby:

DOKUMENTACE MTJ SERVICE S.R.O.

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST. Obor SOČ: 18. Informatika. Školní sdílení PC obrazovek. School sharing PC screens

Operační systémy. Cvičení 4: Programování v C pod Unixem

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Licencování ecscad. Mensch und Maschine Mechatronik GmbH

INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE

Počítačové sítě Aplikační vrstva Domain Name System (DNS)

OS Deadlock a prevence

1 Úvod do sítí TCP a UDP Porty... 1

3 MOŽNÉ PŘÍSTUPY K TVORBĚ APLIKACÍ NAD SVG DOKUMENTY

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

OpenSSL a certifikáty

Základy IOS, Přepínače: Spanning Tree

DŮLEŽITÉ INFORMACE, PROSÍM ČTĚTE!

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Softwarové komponenty a Internet

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Projekt Obrázek strana 135

Relační vrstva SMB-Síťový komunikační protokol aplikační vrstvy, který slouží ke sdílenému přístupu k souborům, tiskárnám, sériovým portům.

Healtcheck. databáze ORCL běžící na serveru db.tomas-solar.com pro

Typy samostatných úloh PSI 2005/2006

Transkript:

Vývoj informačních systémů Námět na praktické cvičení Klient Server (nepovinné)

Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový kód je v http://java.sun.com/developer/technicalarti cles/networking/webserver/webserverco de.html

Hlavní myšlenky (1) Hlavní thread inicializuje server a spustí řadu pracovních threadů, které budou obsluhovat klientská spojení Pracovní thread čeká v klidovém stavu (idle), dokud se nepřipojí klient Hlavní thread přijme spojení od klienta, předá spojení pracovnímu threadu a čeká na dalšího klienta.

Hlavní myšlenky (2) V Javě je inicializace threadu spojena s řadou činností, a tedy pomalá. Proto thready nainicializujeme jen jednou, na začátku. Protože pracovní thready jsou vesměs v klidovém stavu Object.wait(), nepotřebují moc výkonu procesoru

Properties Vlastnosti HTTP serveru se nastaví v souboru:

Komentáře (1) WebServer.loadProps() (řádky 48-93) Tato metoda načte vlastnosti serveru ze souboru www-server.properties,, který musí být v podadresáři lib umístěném v JAVA_HOME (=adresář, ve kterém je na vašem počítači interpreter Java)

Komentáře (2) root root je adresář, ve kterém HTTP server bude hledat soubory. Jinými slovy, root se připojí před jakoukoliv cestu k souboru, kterou zadá klient

Komentář (3) workers říká serveru, kolik pracovních threadů se má vytvořit při inicializaci. Současně to také znamená, kolik klientů může HTTP server obsluhovat současně.

Komentář (4) timeout udává počet milisekund, které má pracovní thread čekat při čtení z klientského spojení. Potom thread vygeneruje timeout a spojení ukončí. Kdyby to tak nebylo, klient by mohl server zablokovat tím, že by nekonečně dlouho otálel s příkazem

Komentář (5) log je to název souboru, do kterého se má ukládat protokol (log) práce serveru. Když není zadáno žádné jméno, protokol se vypisuje na standardní výstup.

Komentář (6) WebServer.main() zde se server inicializuje. Načte properties a vytvoří pole pracovních threadů. Poté naváže ServerSocket na lokální port našeho HTTP serveru a spustí smyčku. V ní přijímá klientská spojení a předává je pracovním threadům.

Komentář (7) třída Worker (řádky 137-148) 148) Třída implementuje java.lang.runnable Běží uvnitř pracovního threadu, kde vykonává konkrétní práci se soubory. Protože v Java alokace paměti může být časově náročná, buffer (byte array) alokujeme jen jednou v konstruktoru a používáme ho opakovaně

Komentář (8) Worker.run() Pracovní thready stráví většinu života čekáním na řádce 162 ve wail().. Když přijde klientské spojení, pracovní thread se probudí a obslouží ho

Komentář (9) Worker.setSocket() (řádky 152-155) 155) Když přijde spojení od klienta, hlavní thread najde neaktivní pracovní thread (řádky 121-131) 131) a zavolá setsocket() na Worker,, čímž se na Worker vyvolá notify() Tím se pracovní thread probudí z wait() setsocket() musí být synchronized,, aby fungovala notify().

Komentář (10) Worker.handleClient() (řádky 189-224) Smyčka, která načte 1. řádek klientova HTTP dotazu. Obvykle má formu GET /foo/bar/baz.html HTTP/1.0 Java nemá goto,, a tak se jméno souboru musí analyzovat trochu složitěji. Jsou tam na to dvě smyčky (pokrač )

pokračování Vnější smyčka while() je čtecí a vnitřní smyčka for() prochází jednotlivé byty a hledá znaky konce řádku. break je sice ve vnitřní smyčce, ale fakticky způsobí i opuštění vnější smyčky.

Komentář (11) třída Worker (řádky 279-285, 285, 360-366) 366) Je důležité, aby se sockety i soubory vždycky správně uzavřely (i při chybách)

Komentář (12) Worker.handleClient() (řádek 303) IP adresu klienta a který soubor požaduje, zapíšeme do logu. IP získáme voláním s.getinetaddress().gethostaddress(), kdyby se zde volala gethostname() gethostname(), bylo by to pomalé (inverzní DNS look-up) Kdo potřebuje HostName, může si to později vyhledat.

Ladění Pro ladění je skvělý HTTP header viewer, protože umí sledovat skutečnou síťovou komunikaci: http://www.rexswain.com/httpview.html http://www.ericgiguere.com/tools/http-header- viewer.html?noprint=true

The End