Treść programowa

  1. Rozpraszanie obliczeń poprzez wykorzystanie gniazd TCP/IP.
  2. Rozpraszanie obliczeń poprzez zdalne wywoływanie procedur.

<aside> 💡 W celu wygospodarowania dodatkowych zajęć na ewentualne poprawy laboratoria 6 i 7 są połączone. Należy wykonać jedną aplikację (osobny klient i serwer) realizującą komunikację zarówno poprzez sockety TCP/IP jaki i zdalne wywoływanie procedur (”Remote Method Invocation” - RMI).

</aside>

Cel zajęć

Celem zajęć jest implementacja gry “kółko i krzyżyk” (”tick-tack-toe”). Gra powinna działać w architekturze klient-serwer.

Projekt

Kluczowe funkcjonalności

  1. Hybrydowa komunikacja sieciowa - użycie zarówno komunikacji poprzez RMI jak i gniazd TCP/IP.
  2. Mechanika gry - implementacja silnika zarządzającego mechaniką gry w kółko i krzyżyk

Obie grupy

<aside> 💡

Java NIO (ciekawostka)

Zalecane jest skorzystanie z pakietu java.nio (New I/O) umożliwiającego tworzenie nieblokujących aplikacji wejścia/wyjścia.

W tradycyjnym modelu serwer nasłuchuje na określonym porcie i czeka na nadchodzące żądania. Kiedy pojawi się nowe zapytanie, serwer deleguje jego obsługę do wątku z wcześniej przygotowanej puli. Podejście to ma jednak pewne ograniczenia. Po pierwsze, liczba jednocześnie obsługiwanych klientów jest ograniczona do rozmiaru puli wątków. Po drugie, jeśli któryś z klientów ma wolne połączenie, wątek przypisany do tego klienta spędza większość czasu czekając na dane, zamiast obsługiwać innych użytkowników. To prowadzi do nieefektywnego wykorzystania zasobów serwera.

Nieblokujący serwer jest rozwiązaniem, które próbuje wyeliminować te problemy. W takim modelu jeden wątek może obsługiwać wiele zapytań jednocześnie. Umożliwia to zastosowanie nieblokującego wejścia/wyjścia (IO), które w Javie realizowane jest za pomocą klas z pakietu java.nio. Dzięki temu serwer może efektywnie zarządzać wieloma połączeniami, nawet jeśli jedno z nich jest wolniejsze.

</aside>