FK~

Moje odkazy

Ostatní odkazy

EFF: svoboda blogování
Close Windows
Nenajdete mě na Facebooku ani Twitteru
Rozpad EU
Jsem členem FSF

Posílání zpráv pomocí fronty (POSIX MQ)

vydáno: 7. 4. 2009 12:15, aktualizováno: 3. 9. 2014 22:15

V operačních systémech odpovídajících standardu POSIX jako je např. Linux nebo Mac OS máme k dispozici systém front. Jedná se o něco podobného jako JMS, ale na nižší (systémové) úrovni. Tato technologie nám umožňuje vytvářet pojmenované fronty (názvy začínají lomítkem). Do těchto front můžeme posílat zprávy a následně je z fronty vybírat. Fronty jsou tak použitelné pro asynchronní meziprocesovou komunikaci (IPC).

Fronty nejsou trvanlivé, při ukončení operačního systému se nám ztratí jak nevybrané zprávy, tak samotné fronty. Komunikace pomocí těchto zpráv je omezena na jeden počítač.

Jedním z důležitých parametrů při vytváření fronty je její velikost – počet zpráv, které se do ní vejdou. Komunikace pomocí zpráv je sice asynchronní, ale při pokusu o přidání zprávy do zaplněné fronty dojde k zablokování (v případě fronty v blokujícím režimu), až do chvíle, dokud se fronta zase neuvolní (jiný proces z ní nějakou zprávu nevybere).

Zprávy se doručují v první řadě podle priority a v rámci stejné priority podle stáří (FIFO).

Program POSIXovéFronty

Napsal jsem jednoduchý program v jazyce C++, pomocí kterého můžete odesílat a přijímat zprávy. Program je svobodný software (GPL) a zdrojové kódy si můžete stáhnout z mého mercurialu (návod).

Program pracuje buď v režimu přijímání zpráv nebo odesílání. Název fronty (/mojeFronta), je zatím nastaven napevno ve zdrojovém kódu.

POSIXové Fronty

Souborový systém front

Fronty si můžeme připojit jako souborový systém. Pomocí příkazů:

mkdir /dev/mqueue/
mount -t mqueue none /dev/mqueue/

si připojíme fronty do adresáře /dev/mqueue – získáme tak snadno přehled o existujících frontách v našem systému, budeme si moci prohlížet jejich velikost a nastavovat jim snadno práva.

Práva se nastavují stejně jako u souborů. Můžeme si tak vyzkoušet nastavit práva k frontě např. na 755 a pomocí jednoho uživatele (vlastníka fronty) zprávy odesílat a pomocí jiného uživatele je přijímat. Druhý uživatel nemůže ale žádné zprávy do fronty přidávat – pokud mu to chceme povolit, nastavíme práva na 777.

Frontu můžeme také jednoduše zrušit, prostě tím, že ji smažeme. V programu by to odpovídalo zavolání funkce mq_unlink().

Využití

V mém příkladu jsem použil systém front pro vytvoření jednoduchého jednosměrného chatu. Toto ale nebude příliš obvyklé využití – spíše použijete fronty ke komunikaci dvou procesů (programů) v rámci jednoho počítače.

Frontu si můžete otevřít současně z několika procesů a současně do ní z několika míst zprávy posílat a zároveň je na několika místech vybírat. Vyzkoušejte si např. spustit dvakrát program v přijímacím režimu a jednou v odesílacím a pozorujte, jak se zprávy distribuují střídavě mezi oba přijímače :-).

Témata: [GNU/Linux] [softwarové inženýrství] [C++]

Komentáře čtenářů


xkucf03, 19. 8. 2009 00:05, Mac OS [odpovědět]

Nemáte někdo Mac OS, abyste tenhle program a posixové fronty vyzkoušeli? :-)

Přidat komentář

reagujete na jiný komentář (zrušit)
jméno nebo přezdívka
název příspěvku
webová stránka, blog
e-mailová adresa
nápověda: možnosti formátování
ochrana proti spamu a trollům

Náhled komentáře