Komunikace s C++ aplikací (démon)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lumen
Člen | 32
+
0
-

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:

  1. Komunikace přes sockety – http://php.net/….sockets.php (jde to vůbec v nette?)
  2. Json Rpc 2 – https://componette.org/search/?…
  3. 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
+
0
-

Ř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
+
+1
-

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.

Já bych jednoznačně doporučil ZeroMQ, má nativní knihovny pro spoustu jazyků vč. PHP a C++.

lumen
Člen | 32
+
0
-

Ok, díky za reakce. Půjdu teda cestou UNIX socketů a vyzkouším (zatím dobře se tvářící) knihovnu ZeroMQ – neznal jsem.

paranoiq
Člen | 392
+
0
-

Nette tě v ničem neomezuje. můžeš použít cokoliv s PHP. třeba signály pomocí pcntl nebo soketů. pokud nemá být komunikace okamžitá nebo je třeba víc vstupů/workerů, tak by se asi víc hodil nějaký frontový server – třeba to ZeroMQ, RabbitMQ, Beanstalk…