Question

Pour un projet récent, j'ai un script PHP en cours d'exécution comme un démon basé CLI. Ce démon sera responsable de la surveillance / contrôle des processus de travail indépendants.

périodiquement, les utilisateurs d'émettre des demandes de gérer les travailleurs par le biais d'un frontal Web PHP (démon CLI et le code frontal se trouvent sur le même serveur physique). Le front-end devra faire des appels de méthode au démon.

Je suis confus sur la façon de gérer ces méthodes « à distance » des appels. Je pensais que l'aide d'un protocole RPC, comme JSON-RPC sur un socket UNIX ou standard TCP serait la voie à suivre, mais chaque mise en œuvre de JSON-RPC, XML-RPC, SOAP, etc. pour PHP semble être étroitement à HTTP. Puisque je ne suis pas communiquer sur le Web, HTTP est complètement inutile.

Alors, deux questions:

  • Pourquoi la plupart des paquets RPC PHP couplé à HTTP?
  • Quelle est la meilleure façon d'appels de méthode de poignée comme décrit ci-dessus?
Était-ce utile?

La solution

  

Pourquoi la plupart des paquets RPC PHP couplé à HTTP?

est facile. PHP est conçu pour le web. C'est la plus rare aux applications d'écriture CLI en PHP.

  

Pourquoi la plupart des paquets RPC PHP couplé à HTTP?

Il est plus fréquent d'avoir PHP exécuter RPC sur les programmes en cours d'exécution dans une autre langue, comme Java, et il y a de bonnes options là-bas.

Pour un programme PHP CLI, je ne suis pas au courant d'aucun hors-the-box solution. Mais il devrait être possible de mettre en œuvre une solution personnalisée avec les sockets UNIX. Voir prises l'extension. Notez que le support non-existence de multi-threading en PHP peut faire un peu plus difficile (pour gérer plusieurs connexions vous devrez bifurquer ou mettre en œuvre votre propre programmateur single-thread ...)

Autres conseils

Vous pouvez toujours utiliser le protocole HTTP et se connecter à localhost, qui ne génère aucun trafic réseau. Je ne pense pas qu'il y ait un réel avantage à gagner en utilisant les sockets directement, mais si vous voulez vraiment une couche de transport différent, vous pouvez utiliser Ripcord (http://ripcord.googlecode.com/) qui vous permet de spécifier votre propre classe de couche de transport. Pour la divulgation complète, je suis l'auteur de Ripcord, afin que je puisse être biaisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top