[Tutor PyCZ] aplikace typu daemon
superman
feed na centrum.cz
Čtvrtek Listopad 9 12:08:34 CET 2006
> Dobry den,
> uz jsem ten dotaz jednou pokladal, ale nikdo mi neporadil, mozna jsem se
> jen nespravne vyjadril. Muzete mi doporucit vhodny zpusob, jak
> komunikovat s aplikaci typu daemon (resp. server apliace bezici na
> pozadi). Budu ji jiste potrebovat nejaky pokyn k ukonceni apod.,
> prozatim jsem to delal pres sit (pokynem z klienta), ale to jiste neni
> nejlepsi zpusob, co kdyz sit nepujde. Myslim, ze na UNIX platforme se
> pouziva napriklad zapis nejakeho retezce do specialniho souboru. Mozna
> by toto byl zpusob, ale nevim, jak hlidat zmenu nejakeho souboru na
> disku. Nebo znate nejaky lepsi zpusob?
> Dekuji za odpoved
> Karel
Podle mě neexistuje lepší způsob, než to udělat přes nějaký způsob
meziprocesové komunikace. Podle mě naprosto nejlepším způsobem je,
prostě to poslal jako povel po socketu, pokud samotný daemon po síti již
komunikuje. Prostě si vymyslíte speciální povel, nebo datový balík,
který vyslaný jako požadavek na server způsobí ukončení naslouchání
novým příkazům, dokončí zpracování právě prováděných věcí a pak se ukončí.
Jako sokety si nesmíte představovat jenom TCP/IP protokol, sokety jsou
obecný mechanismus pro komunikaci mezi procesy, záleží jaký typ soketu
si otevřete. Některé typy soketů pak nepotřebují ani komunikaci po síti.
Jinak síť půjde vždycky, protože pokud máte nainstalovány ovladače pro
sí%tové rozhraní, pak síť jde i na jednom počítači. Tedy můžete mít
klienta i server na jednom počítači a pak nepůjde komunikace vůbec přes
síťovou kartu a ani není potřeba žádný síťový hw. I jeden počítač je de
facto síť o jednom počítači. Co Vám brání spustit si klienta na stejném
počítači jako je server a poslat požadavek takto? Pak nepotřebujete
žádný síťový hw ani ovladač, veškerá síťová komunikace proběhne pouze
jako "emulace v kernelu operačního systému".
Nevím co máte proti soketům, já to považuji za dobré řešení. Hlídat
změnu souboru na disku samozřejmě také jde, třeba ve Windows dokonce
můžete požádat systém, aby Vás automaticky upozornil, kdykoli se na
souborovém systému stane nějaká Vámi zadaná událost, jako je třeba
smazání souboru, nebo změna souboru atd., takže to nemusíte programovat,
pouze chytnete zprávu od jádra Windows. Na Linuxu v posledních jádrech
kernelu byla podobná funkce na hlídání změn v souborovém systému také
přidána, ale je to zatím dost čerstvé. Ale já tohle řešení považuji za
"dirty".
Jinak na Windows je, pokud chcete zůstat v rámci jednoho počítače dobré
řešení nastavit nějaký mutex, nebo event, nebo jiný prostředek sloužící
původně pro synchronizaci procesů a threadů. Jednoduché, rychlé,
elegantní, spolehlivé. Snad to dokonce lze i po síti, ale nezkoušel
jsem. Na Linuxu samozřejmě lze mutext, condition variables a další
používat také, ale Linux je na tyto věci hůře vybaven, i když to funguje.
Lze vymyslet řadu dalších řešení, ale nemá to smysl. Řešení se souborem
se mi nelíbí, neboť narážíte a vyrábíte si zbytečné problémy s právy. CO
když nebudete mít právo zapsat tam, nebo onde. Já vím, není to až takový
problém, ale proč si lámat hlavu s problémy, které nemusíte řešit?
Miloslav Ponkrác
Další informace o konferenci Tutor