Komunikace s C++ aplikací (démon)
- lumen
- Člen | 32
Ahoj, mám Nette aplikaci, která by se v linuxovém prostředí potřebovala dotazovat C++ aplikace (běžící démon) a ta by jí dávala odpovědi. C++ aplikace by teda byla v roli serveru. Data bych si předával klasicky přes DB. Nejhloupější řešení je cyklení nad databází a tomu bych se rád vyhnul. Jaké je ideální řešení? Co mě napadá a nemám s tím zkušenosti:
- Komunikace přes sockety – http://php.net/….sockets.php (jde to vůbec v nette?)
- Json Rpc 2 – https://componette.org/search/?…
- Běžně mezi dvěma C++ démony používám k vybuzení unixové signály SIGUSR1 a SIGUSR2. To ale tady (Nette) asi použít nemůžu – nebo jo? (http://php.net/…l-signal.php)
Řešil někdo něco podobného? Díky moc za jakýkoli komentář.
- Milo
- Nette Core | 1283
Řeším dnes a denně.
Nejjistější jsou UNIX sockety. Obě části aplikace mohou jak naslouchat
na svém socketu, tak posílat na druhý socket. Tam si ale stejně budeš muset
vymyslet nějaký messaging protokol, používám serialize()
nebo
json_encode()
+ vlastní krátkou hlavičku.
Přes DB to řeším pouze pokud potřebuji transakce a jistotu, že se zpráva neztratí. Server nemusí nutně loopovat nad DB pokud to nutně nepotřebuje, aplikace ho mohou informovat signálem.
Občas používám shared memmory (shm_get_var() a pod) a někde i System V messaging (msg_receive() a pod).
Nette je webový framework, ten s inter-process zprávami nepracuje, ale v čistém PHP to jde.
- jiri.pudil
- Nette Blogger | 1032
Nejjistější jsou UNIX sockety. Obě části aplikace mohou jak naslouchat na svém socketu, tak posílat na druhý socket. Tam si ale stejně budeš muset vymyslet nějaký messaging protokol, používám
serialize()
nebojson_encode()
+ vlastní krátkou hlavičku.
Já bych jednoznačně doporučil ZeroMQ, má nativní knihovny pro spoustu jazyků vč. PHP a C++.