Pregunta

Supongo que para cada solicitud de página, el servidor web (por ejemplo, Apache) crea una nueva instancia de un script en la memoria. ¿Pueden estas instancias comunicarse entre sí mientras se ejecutan? y pasar datos también?

¿Fue útil?

Solución

Si desea pasar datos entre scripts en PHP, sugiero usar memcached o una base de datos. O posiblemente APC.

Si los scripts pertenecen a la misma sesión, teóricamente podrían comunicarse a través de la sesión, pero esto sería efectivamente una comunicación unidireccional en la mayoría de los casos porque solo un script puede acceder a la sesión en cualquier momento (session_start () bloquea el sesión hasta que el script finalice la sesión implícita o explícitamente).

Otros consejos

Creo que las sugerencias de Martin y Cletus son válidas. Mi elección sería función del objetivo final del script.

  • ¿Cuántos datos arrojarás? ¿Se puede manejar la sobrecarga de un proceso externo?
  • ¿Qué tipo de datos estás intercambiando? ¿Está normalizado? ¿O vale la pena normalizarlo ahora?
  • ¿Tendrá que consultar esos datos más adelante? ¿O se puede descartar después de ser procesado?
  • ¿Se ejecutarán esos scripts alguna vez en diferentes servidores?

  • Archivos planos, con mecanismo de bloqueo

  • DB relacional
  • Document DB (almacén de clave / valor, persistente o no)
  • Memoria compartida (APC o funciones principales)
  • Colas de mensajes (Active MQ y compañía)

Creo que obtendrá el mayor valor al externalizar el proceso, ya que puede tener más de una máquina administrando los mensajes / datos y más de uno produciéndolos / consumiéndolos.

El modelo en el que operan los scripts PHP no contiene realmente la noción de ningún tipo de persistencia en la memoria para esos scripts, ya que generalmente están diseñados para ejecutarse solo durante el tiempo mínimo requerido para servir la página solicitada. Esto dificultaría tener un uso significativo para la comunicación con estado entre esos scripts, ya que generalmente una vez que se sirve la página no hay nada más que el script pueda hacer. Por lo tanto, generalmente cualquier comunicación entre scripts PHP se realiza más mediante la manipulación de entradas de bases de datos y similares.

Si tiene algún tipo de procesamiento continuo que debería estar sucediendo para el que desea pasar datos, es posible que desee buscar otros modelos de aplicaciones web, como servlets.

Debería poder hacer esto con un poco de memoria compartida, como se describe aquí: http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/ (suponiendo que usted ' no se ejecuta en Windows)

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