señalización dentro de php

hola al implementar una conexión que permanece abierta durante mucho tiempo (cometa), ¿cómo implementaría la señalización entre php proses (solicitudes pendientes)?

ejemplo de línea de tiempo:

  • solicitud 1 inicio
  • la solicitud 1 realiza una acción
  • solicitud 1 duerme
  • solicitud 2 inicio
  • la solicitud 2 realiza una acción
  • la solicitud 2 notifica la solicitud 1 y se va a dormir
  • la solicitud 1 se despierta y envía los nuevos datos
  • solicitud 1 duerme agen

Estaba deambulando si había un método que usaba menos (¿notando?) CPU prosessing

preguntado el 16 de mayo de 11 a las 20:05

3 Respuestas

Si su plataforma es Linux / Unix, puede usar colas.

  • solicitud 1 inicio
  • la solicitud 1 realiza una acción
  • solicitud 1 espera y cola de lectura (espera (1) y cola de lectura)
  • solicitud 2 inicio
  • la solicitud 2 realiza una acción
  • solicitud 2 enviando mensaje a la cola
  • la solicitud 1 recibe un mensaje de la cola, se activa y envía los nuevos datos
  • solicitud 1 duerme de nuevo

Con semáforos puedes hacer esto sin sleep() incluso, pero será más difícil de codificar.

contestado el 17 de mayo de 11 a las 01:05

gracias oz_ msg_receve bloques para mí que es perfecto para mi objetivo - beber

a medida que se bloquea, chack e informa de su uso de la CPU hasta ahora, se ve bien. beber

mmmm, sry por la resonancia tardía, pero ¿hay alguna manera de distribuir un mensaje para que lo reciba cualquier oyente? - beber

@borrel este mensaje puede ser recibido por cualquier oyente. - ONZ_

Lo siento por la distribución, envíe un mensaje a varios oyentes y deje que todos lo procesen. beber

Creo que tendrías que usar pcntl_signal (), junto con pcntl_fork (). Sin embargo, el servidor tendría que admitir la bifurcación.

En cuanto al uso de la carga de procesamiento de la CPU tu duerme() en el bucle para que el procesador tenga tiempo para ser utilizado por otros procesos.

contestado el 17 de mayo de 11 a las 01:05

idealmente, escribiría esto con las solicitudes o "trabajos" con el propósito de que esto se escriba en una base de datos.

el script 1 hace algo y escribe un "trabajo" en la base de datos
el script 1 duerme durante un intervalo, luego verifica si hay un código de retorno para ese trabajo en la base de datos, si es así, entonces
actuar
si no duerme / repite

El script 2 comprueba si hay trabajos incompletos en la base de datos.
si es así entonces
actuar y escribir código de retorno
si no duerme / repite

contestado el 17 de mayo de 11 a las 00:05

quería evitar el sueño; comprobar; dormir prosegure, al señalar que todos ustedes un get_nextmesg () whisch duerme hasta que reciba un mensaje en la cola - beber

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.