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