Pregunta

En un proyecto reciente, tengo un script PHP se ejecuta como un daemon basada en CLI. Este demonio será responsable de la supervisión / control de los procesos de trabajo independientes.

Periódicamente, los usuarios emitir peticiones para administrar los trabajadores a través de un front-end web PHP (demonio CLI y código de front-end están en el mismo servidor físico). El front-end tendrá que hacer llamadas a métodos para el demonio.

Estoy confundido acerca de cómo manejar estos "remotos" llamadas a métodos. Pensé que el uso de un protocolo RPC como JSON-RPC a través de una toma de corriente estándar de UNIX o TCP sería el camino a seguir, pero cada aplicación de JSON-RPC, XML-RPC, SOAP, etc. para PHP parece estar estrechamente unida a HTTP. Ya que no estoy comunicación a través de la web, HTTP es completamente innecesario.

Por lo tanto, dos preguntas:

  • ¿Por qué la mayoría de los paquetes de PHP RPC acoplado a HTTP?
  • ¿Cuál es la mejor manera de llamadas a métodos de mango como se describe anteriormente?
¿Fue útil?

Solución

  

¿Por qué la mayoría de los paquetes de PHP RPC junto a HTTP?

Esto es fácil. PHP está diseñado para la web. Es raro que las aplicaciones CLI de escritura en PHP.

  

¿Por qué la mayoría de los paquetes de PHP RPC junto a HTTP?

Es más común tener PHP realizar RPC en los programas en ejecución en otro idioma, como Java, y hay buenas opciones allí.

Para un programa PHP CLI, no estoy al tanto de cualquier solución fuera de la caja. Pero debería ser posible implementar una solución personalizada con tomas UNIX. Vea la tomas de extensión . Tenga en cuenta que la no existencia de múltiples soporte de hilos en PHP puede hacer esto un poco más difícil (para manejar múltiples conexiones que tendrá que desembolsar o implementar su propio programador de un solo hilo ...)

Otros consejos

Aún se podía utilizar HTTP y conectarse al servidor local, que no genera ningún tráfico de red. No creo que haya ninguna ventaja real que se pueden obtener mediante el uso de enchufes directamente, sin embargo, si realmente desea una capa de transporte diferente, usted podría utilizar cordón de apertura (http://ripcord.googlecode.com/), que le permite especificar su propia clase de capa de transporte. Para una descripción completa, yo soy el autor del cordón de apertura, por lo que puede no ser imparcial.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top