Frage

Für ein aktuelles Projekt habe ich einen PHP-Skript als CLI-basierten Daemon läuft. Dieser Dämon wird zur Überwachung / Steuerung unabhängige Arbeitsprozesse verantwortlich sein.

In regelmäßigen Abständen werden die Nutzer-Anfragen ausgeben Arbeiter durch eine PHP-Web-Front-End zu verwalten (CLI-Daemon und Front-End-Code auf dem gleichen physikalischen Server sind). Das Front-End muß Methodenaufrufe an den Dämon machen.

Ich bin verwirrt darüber, wie diese „remote“ Methodenaufrufe zu behandeln. Ich dachte, dass ein RPC-Protokoll wie JSON-RPC über einen Standard-UNIX oder TCP-Socket wäre der Weg zu gehen, aber jede Implementierung von JSON-RPC, XML-RPC, SOAP, etc. für PHP scheint eng zu koppeln HTTP. Da ich nicht über das Internet zu kommunizieren, HTTP ist völlig unnötig.

Also, zwei Fragen:

  • Warum die meisten der PHP RPC sind Pakete gekoppelt HTTP?
  • Was ist der beste Weg, um Griff Methodenaufrufe, wie oben beschrieben?
War es hilfreich?

Lösung

  

Warum sind die meisten der PHP RPC-Pakete gekoppelt HTTP?

Das ist einfach. PHP ist für das Web zugeschnitten. Es ist seltener zu schreiben CLI-Anwendungen in PHP.

  

Warum sind die meisten der PHP RPC-Pakete gekoppelt HTTP?

Es ist häufiger in einer anderen Sprache PHP ausführen RPC auf Programme zu haben, wie Java, und es gibt gute Möglichkeiten gibt.

Für ein CLI PHP-Programm, ich ist nicht bekannt, dass out-of-the-box-Lösung. Aber es sollte möglich sein, eine individuelle Lösung mit UNIX-Sockets zu implementieren. Sehen Sie sich die Steckdosen Erweiterung . Beachten Sie, dass die Nicht-Existenz von Multi-Threading-Unterstützung in PHP kann ein bisschen schwieriger macht diese (mehrere Verbindungen verarbeiten Sie müssen Ihren eigenen Single-Thread-Scheduler Gabel oder zu implementieren ...)

Andere Tipps

Sie können nach wie vor verwenden HTTP und eine Verbindung zu localhost, das keinen Netzwerkverkehr erzeugen würde. Ich glaube nicht, dass es keine wirkliche Vorteil ist jedoch gewonnen werden durch Buchsen direkt verwenden, wenn Sie wirklich eine andere Transportschicht möchten, können Sie Ripcord verwenden (http://ripcord.googlecode.com/), die Sie angeben können, Ihre eigene Transportschicht-Klasse. Für die vollständige Offenlegung, sie ist der Autor von Ripcord, so dass ich voreingenommen sein kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top