Jak naprogramovat server - thready,IPC,...?

Karel Zak zakkr na zf.jcu.cz
Pátek Červen 8 15:05:07 CEST 2001


On Fri, Jun 08, 2001 at 12:45:08PM +0200, mjp na email.cz wrote:
> Dobry den,
> ucim se programovat v prostredi Linuxu a resim ted nasledujici problem:

 Zacal bych nastavenim mailovaciho programu na delku radky 70-80 
znaku :-)

> Pracuji na simulaci artificial life, predstavoval bych si to nasledovne 
>- prostredi funguje jako server, ke kteremu se pripojuji klienti - 
> organizmy. Problem je nasledujici: jednotlivi klienti by asi meli byt 
> obsluhovani jednim threadem serveru.

   To nutne nemusi, jeden thread muze obsluhovat i vice klientu. Pokud
klient nema zadnou zadost na server je zbytecne, aby i na serveru byl
thread ktery nic nedela. Ale je to pracnejsi na implentaci a stoji to
i nejaky cas CPU to rozdavani prace threadum, proto se vetsinou dela tak 
jak naznacujete, tedy: sum(klientu)=sum(threadu-serveru). 
   Zalezi jak moc velke prodlevy jsou mezi zadostmi typickeho klinta. 
Muzete to udelat i tak, ze klient si muze "privlastni" urcity thread 
serveru pokud bude vedet, ze bude posilat vetsi mnozstvi pozadavku za 
sebou a neustale prerozdelovani mezi thready by bylo narocne. Takle by 
mel v ve finale pracovat server projektu Mape :-)

> Jak by mezi sebou tyhle thready 
> mely komunikovat? Je lepsi reseni nez pres globalni promenne serveru?

 Ano, jinak nema pouziti threadu valneho vyznamu.

 
> Klientu je v jednom okamziku radove asi dvacet, ale rychle se meni 
> (pripojuji, odpojuji - "umiraji" a "rodi") - neni se vznikem threadu 
> a vytvorenim spojeni se serverem prilis velka rezie systemu?

 IMHO v tomto v Linuxu neni velkeho rozdilu mezi threadem vs. procesem.
Pokud uz ted je jasne, ze klienti budou takto narocni na pripojovani
tak to reste tak, ze po odpojeni klienta thread nepojde, ale naopak je
pripraven na noveho klienta. Tak ostatne pracuje i klasicky Apache (ale s
fork()). Neustale startovat thready je neefektivni a zbytecne.
 
> Dalsi problem - jak by mohli jednotlivi klienti komunikovat mezi sebou? Napadlo me:
> 1. pres server si posilat zpravy
> 2. kazdy klient je zaroven server na jinem portu - to je asi dost nemotorne

 2) = nejaka sit kde kazdy je server a klient. To by mohlo byt zajimave
hlavne pokud by tam nebyl zadny hlavni server. Neco jako gnutela (nebo jak
se to jmenuje). Pak by slo implementovat nejaky protokol s moznosti
vzajemneho ovlivnovani klientu vcetne moznosti rozmnozovani se a existence
predatoru apod. To by mohla byt i hra/simulace bezici po celem internetu :-)

		Karel

-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/
 
 C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Linux