Kockadobás kliens-szerver alkalmazás

Fejlesszünk elosztott, hálózatos, datagram alapú üzenetküldéssel megvalósított Java alkalmazást!

A kockadobás kliens egyszerre két szabályos dobókockával dob, amit ezerszer megismétel és a dobott számok összegét datagram típusú üzenetküldéssel folyamatosan elküldi a szervernek. A szerver localhost-on fut és egy megadott porton keresztül várja a klienstől. A szerver és a kliens egyaránt szálkezelést alkalmazó konzolos alkalmazás.

A projektben van egy swing GUI-s alkalmazás, amely JFreeChart oszlopdiagramon – folyamatosan frissítve – megjeleníti az összesített adatokat, mindez a szerver üzenetküldésével irányítva (amint beérkezik egy dobott (2-12-ig) összeg).

A kommunikációnak – a lehetőségekhez képes – biztonságosnak és – a hálózati adatforgalmat tekintve – takarékosnak kell lennie! Ennek részeként szükséges egy azonosító és egy egyszerű szabály (protokoll).

Tekintsük át mondatszerűen a szálkezelést használó kliens és szerver kommunikációhoz kötődő feladatait:

Ezek működését összefogja egy központi vezérlőosztály és ez a fejlesztőeszköz projektablakában így jelenik meg (egyetlen MVC Java projektként):

A program két felületen kommunikál. A háttérben konzolosan logol a kliens, és a háttérben futó szerver időnként frissítteti a grafikus felhasználói felületen (GUI, ablak) megjelenő grafikont:

Kockadobás - Java kliens-szerver alkalmazás működésa

Aki kedvet kapott: bátran készítse el a fenti terv/koncepció/specifikáció alapján az MVC Java projektet. Érdemes alaposan tesztelni: külön a szervert, külön a klienst, először indítva az egyiket, majd a másikat, leállítani az egyiket majd fordítva. Átgondoltan indokolni is hasznos, vajon mi, hogyan és miért történik.

A bejegyzéshez tartozó forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A feladat a Java EE szoftverfejlesztő tanfolyam 1-8. óra: Elosztott alkalmazások, webszolgáltatások, szálkezelés, párhuzamosság alkalmához kapcsolódik. Amikor itt járunk a tananyagban, akkor a GUI felület és a grafikon tervezése, megvalósítása már magabiztosan megy, így elegendő a hálózati kommunikációra helyezni a fókuszt.


Ajánljuk a Java EE szoftverfejlesztő tanfolyam kategóriából

“Kockadobás kliens-szerver alkalmazás” bejegyzéshez 5 hozzászólás

  1. A forráskódot megnézve és persze az elméletet átrágva megértettem, hogy vannak blokkoló és nem blokkoló Socket alapú programok Javaban. Mivel ez most egy nem kritikus szerverhez való csatlakozás, így a példa a nem blokkoló változatot tartalmazza. Ezek szerint ezért nem pörög 100%-on a processzor a végtelen ciklus miatt?

    Válasz
    • Így van Károly, jól összeraktad fejben. A figyelés csak akkor reagál ebben az esetben, ha érkezik üzenet. A több szálon futó programoknál (vagy ha több program összehangoltan kommunikál) már többféle eset (üzenetfeldolgozási mód) adódhat. Más megközelítést találsz a ServerSocketChannel és a SocketChannel osztályok működését bemutató mintaprogramunkban. Érdemes összehasonlítani.

      Válasz
  2. A datagram (UDP) nem garantálja a csomag megérkezését. Próbálgattam már ilyen programot és 100000 küldésnél már előfordult, hogy 1-2 csomag elveszett. Persze nem biztos, hogy ez a csekély hibaarány számít egy adatátvitelnél, de lehet, hogy kritikus. Tudom, hogy lecserélhető a datagram másra. Meg lehetne oldani a kommunikációt egy olyan programban, ami datagramot használ és MVC-s? Megbeszélhetjük ezt valamelyik következő órán?

    Válasz
    • Áron: igen és igen.
      Egy egyszerű ötlet: ennél a programnál többutas kézfogás üzenetküldéssel összegyűjthetnénk, hogy a szükséges kockadobásból mennyi történt meg (“mennyi ment át”) és pótoltathatnánk a hiányzó dobásokat.
      Balázs mutat majd a szombati órán 3 – iparban is használt – ötletet és folyamatokban gondolkodva végigköveti a csoport egy projekt forráskódjában böngészve a lehetőségeket a beavatkozásra. Algoritmusban kell gondolkodni, amivel felülről korrigáltatható egy rendszerben egy-egy alul lévő gyengébb láncszem.

      Válasz

Szólj hozzá!