Jak programovat client server II

Veros Kaplan xkaplan na informatics.muni.cz
Čtvrtek Duben 8 08:35:12 CEST 1999


On Thu, 8 Apr 1999, David Flekna wrote:

: Potrebuji, aby vsechny procesy, ktere vzniknou po pripojeni klientu mohly
: sdilet urcitou datovou strukturu a to tak, ze kdyz v ni kterykoliv z nich
: neco zmeni, tak to uvidej i vsichni ostatni. Tusim, ze se asi ptam na
: trivialni vec, ale nejak se v tom porad nemohu zorientovat. Nevim, jestli by
: bylo lepsi pouzit na to fork() nebo clone() a jak definovat tu strukturu aby
: meli do ni vsichni pristup.

   Zkuste to udelat bez fork()u. Pro kazde spojeni bude vytvorena stavova
struktura a program bude jeden velky cyklus, ktery bude select()ovat
filedeskriptory spojeni a hlavni spojeni. Pri pozadavku na cteni zpracuje
prichozi data.
    Vyhoda tohoto reseni je, ze nemusite datovou strukturu zamykat,
neb ji muze menit najednou pouze jedno spojeni. Navic vytvoreni noveho
procesu je draha zalezitost. Nevyhodou je, ze nevyuzijete pripadny vyssi
pocet procesoru v systemu a ponekud vetsi slozitost - delate-li toto
poprve.
    Kdysi jsem zkousel naprogramovat sitove Pexeso, neni to dodelane, ale
je to pekny priklad na vyse uvedene. Jednoprocesovy server obsluhujici
vice spojeni.

   Druhou moznosti je pouzit SystemV IPC, konkretne sdilenou pamet. To je
popsane v nejake dokumentaci na www.linux.cz - alespon ja jsem to tam loni
nasel. Tusim, ze to je Linux Programmers Guide.

   A nebo pouzit mmap, pripadne vicevlaknovy server.

                           Preji krasny den
                                                 Veros
--
Veros Kaplan <xkaplan na informatics.muni.cz>     http://www.fi.muni.cz/~xkaplan
ISO-8859-2 compatible                    student Fakulty informatiky, MU Brno
"Neni divu, ze jsem zmaten. Jeden z mych rodicu byl muz a druhy zena."



Další informace o konferenci Linux