• Nie Znaleziono Wyników

Programowanie aplikacji klient-serwerProjekt: Serwer WWW

N/A
N/A
Protected

Academic year: 2021

Share "Programowanie aplikacji klient-serwerProjekt: Serwer WWW"

Copied!
4
0
0

Pełen tekst

(1)

Autor: Maciej Korzeń Grupa: IZ06SK1

Programowanie aplikacji klient-serwer Projekt: Serwer WWW

2007.07.04

(2)

Spis treści

Wstęp...2

Kompilacja...2

Uruchamianie i możliwości programu...2

Ogólny opis algorytmu rozwiązania...2

Pliki zewnętrzne i biblioteki...2

Dokumentacja kodu...3

Kod źródłowy...3

(3)

Wstęp

Program jest uproszczonym serwerem WWW (protokół HTTP). Potrafi obsłużyć proste żądania typu GET. Umie generować strony z zawartością katalogu oraz wysyłać pliki. Dodatkowo obsługuje połączenia szyfrowane (HTTPS).

Kompilacja

Aby skompilować program wystarczy wydać polecenie make w katalogu ze źródłami programu.

Uruchamianie i możliwości programu

Program posiada kilka opcji możliwych do włączenia z poziomu wiersza poleceń podawanych w czasie wywoływania programu. Aby obejrzeć je wszystkie należy uruchomić program z

argumentem -h:

./my_httpd -h

Podając argument -d możemy włączyć logowanie dodatkowych komunikatów do pliku log_debug. Standardowo program loguje informacje do plików log_main (komunikaty ogólne) oraz log_access (informacje o żądaniach od klientów).

Argumenty -p oraz -l pozwalają zmienić numery portów (odpowiednio HTTP i HTTPS) na których będzie nasłuchiwał serwer. Mogą się okazać przydatne jeśli uruchamiamy serwer jako użytkownik inny niż root.

Argumenty -f oraz -t pozwalają nam określić ile procesów potomnych oraz wątków ma utworzyć serwer. Przy czym jeśli określimy, że ma być uruchomionych N potomków, to serwer utworzy N potomków do obsłużenia połączeń HTTP oraz N potomków do obsłużenia połączeń HTTPS.

Argumenty -c oraz -u pozwalają nam zwiększyć bezpieczeństwo. Pierwszy z nich powoduje, że serwer przed rozpoczęciem przyjmowania połączeń zmieni swój katalog główny (chroot()) na katalog podany jako argument. -u pozwala na zmianę użytkownika z którego prawami działa serwer (zmniejszenie uprawnień, setuid()).

W pliku server.pem należy umieścić certyfikat SSL który będzie wykorzystywany do szyfrowania połączeń HTTPS.

Ogólny opis algorytmu rozwiązania

Program uruchamia kilka procesów potomnych, a każdy z nich kilka wątków. Dopiero te wątki obsługują nadchodzące żądania klientów. Wątki uruchamiane są jeszcze przed odebraniem żądań do obsługi. Pozwala to zmniejszyć czas jaki klient oczekuje na obsłużenie żądania.

Uruchomienie kilku procesów potomnych zapewnia nam niezawodność, gdyż jeśli jeden z nich zostanie zabity (w wyniku wystąpienia błędu), to nie będzie miało to wpływu na inne procesy.

Wątki z kolei pozwalają nam na szybsze obsługiwanie klientów, niż procesy.

Jeśli jeden z procesów zginie, to proces główny tworzy na jego miejsce nowego potomka.

Pliki zewnętrzne i biblioteki

Serwer wykorzystuje bibliotekę OpenSSL do realizacji funkcjonalności związanej z szyfrowaniem połączeń.

Dokumentacja kodu

Dokumentacja funkcji oraz zmiennych została sporządzona za pomocą programu Doxygen i znajduje się w katalogu documentation/html.

(4)

Kod źródłowy

Kod źródłowy programu znajduje się w pliku my_httpd.c.

Cytaty

Powiązane dokumenty

Streszczenie: W referacie omówiona zostanie nietypowa droga pozyskiwania danych obrazowych za pomocą systemu agentowego i agenta który jest uruchomionym procesem przesyłanym

a) wersja 1: serwer wieloprocesowy (jeden proces obsługuje jednego klienta), b) wersja 2: serwer wielowątkowy (jeden wątek obsługuje jednego klienta). c) wersja 3:

b) wersja 2: serwer wyprzedzająco wieloprocesowy (tworzona jest pula procesów, które są następnie przydzielane do klientów, jeden proces obsługuje jednego klienta). c) wersja

ad a) Uruchom serwera i klienta. Wpisz jeden wiersz tekstu. Po otrzymaniu odpowiedzi z serwera, usuń proces serwera. Czy w procesie klienta coś się dzieje? Jaki jest stan

gdzie root_key.pem będzie zawierać klucz prywatny zaś root_request.pem żądanie certyfikatu. b) Wygeneruj certyfikat główny:. $ openssl x509 –req –in root_request.pem

W związku z tym łączny czas wykonania przez jeden wątek zlecenia wymagającego operacji dyskowej wynosi 1*(8ms + 60ms) = 68ms, gdyż dopiero w 68ms po otrzymaniu takiego zlecenia

+ obsługa różnorodnych metody uwierzytelniania, + istnieje możliwość negocjacji używanej metody uwierzytelniania, + ponieważ urządzenie dostępowe może pracować w roli

Każdy z klientów po wystartowaniu w niezależnym wątku tworzy gniazdo typu Socket znając port i nazwę hosta, na którym znajduje się serwer oraz tworzy