Foros del Web » Programando para Internet » PHP »

php e hilos

Estas en el tema de php e hilos en el foro de PHP en Foros del Web. Hola Tengo un problema, tengo que hacer una pagina web en la cual tengo que tener un socket abierto por si me mandan informacion para ...
  #1 (permalink)  
Antiguo 09/11/2006, 16:03
 
Fecha de Ingreso: abril-2002
Mensajes: 21
Antigüedad: 22 años
Puntos: 0
php e hilos

Hola

Tengo un problema, tengo que hacer una pagina web en la cual tengo que tener un socket abierto por si me mandan informacion para actualizar la pagina. Pero a su vez, esa pagina es interactiva, es decir, que yo puedo seleccionar objetos, pestañas, mostrar menus contextuales.

He hecho una pagina que se conecta y hace de servidor, pero claro, tengo que hacer un bucle para esperar datos, y esto hace que no se vea nada del resto de la pagina.

¿Hay alguna manera de hacer esto? normalmente se haría con eventos, o con hilos.

Gracias
  #2 (permalink)  
Antiguo 09/11/2006, 16:05
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Prueba con las funciones de control de salida de PHP

http://es2.php.net/manual/es/ref.outcontrol.php
  #3 (permalink)  
Antiguo 09/11/2006, 17:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por sergiarias Ver Mensaje
Hola

Tengo un problema, tengo que hacer una pagina web en la cual tengo que tener un socket abierto por si me mandan informacion para actualizar la pagina. Pero a su vez, esa pagina es interactiva, es decir, que yo puedo seleccionar objetos, pestañas, mostrar menus contextuales.

He hecho una pagina que se conecta y hace de servidor, pero claro, tengo que hacer un bucle para esperar datos, y esto hace que no se vea nada del resto de la pagina.

¿Hay alguna manera de hacer esto? normalmente se haría con eventos, o con hilos.

Gracias
Realmente PHP no maneja ni eventos ni hilos.

PHP ejecutado bajo servidor HTTP .. el objetivo principal es que tu le pidas a ejecutar tu script .php .. tu servidor HTTP se la pasa al interprete de PHP .. este ejecuta su parte y entrega su salida otra vez al servidor HTTP para que este la haga llegar por el protocolo HTTP al cliente.

He de ahí que tu proceso en bucle "infinito" se quede tu "cliente" colgado a la espera de la página que supuestamente vas a recibir.

Realmente un "socket" de este estilo deberías progrmarlo como Applet Java e integrarlo en tu página HTML como de constumbre .. PHP lo usarás para otras cosas.

Por otro lado puedes usar técnicas como "AJAX" (tenemos un foro para tal fin) donde podrías eventualmente cada cierto tiempo ir a ejecutar tu script PHP .. pero esto ya no serviría para "estar a la espera" como un socket clásico.

Se me olvidaba .. Otra cosa que puedes hacer (no sé que tanto te servirá en tu caso particular) es lanzar una función a ejecutar aunque el cliente cierre su ventana abierta (conexión mejor dicho) con el servidor ..

register_shutdown_function()
http://www.php.net/register_shutdown_function

Por lo menos así puedes lanzar la ejecución de la función que registres de ese modo y continuar con la ejecución de tu script.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 09/11/2006, 18:16
Avatar de anthemfor182  
Fecha de Ingreso: enero-2006
Ubicación: Colombia
Mensajes: 73
Antigüedad: 18 años, 3 meses
Puntos: 2
PHP tambien puede funcionar en modo cli (linea de comandos) y GTK donde podemos aplicar muchas funciones adicionales que son poco usadas en aplicaciones Web.

Por ejemplo las extensiones: GTK (Aplicaciones Graficas), Newt, NCurses, Sockets, Acceso a Puertos Serial (DIO), ReadLine, Semaphore, OpenAL, APD, PCNTL, Algunos Wrappers como STDIN, STDOUT etc, son extensiones y funcionalidad que puede ser utilizada sin necesidad de un servidor Web, incluso la gran mayoria de funciones puede ser utilizada para hacer pequeñas tareas ó grandes, que funcionen en modo consola.

El aprovechamiento de algunas funciones como la extensión PCNTL (solo Linux) http://www.php.net/manual/es/ref.pcntl.php permiten trabajar PHP en un entorno multi-hilado.

Saludos
  #5 (permalink)  
Antiguo 09/11/2006, 18:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por anthemfor182 Ver Mensaje
PHP tambien puede funcionar en modo cli (linea de comandos) y GTK donde podemos aplicar muchas funciones adicionales que son poco usadas en aplicaciones Web.

Por ejemplo las extensiones: GTK (Aplicaciones Graficas), Newt, NCurses, Sockets, Acceso a Puertos Serial (DIO), ReadLine, Semaphore, OpenAL, APD, PCNTL, Algunos Wrappers como STDIN, STDOUT etc, son extensiones y funcionalidad que puede ser utilizada sin necesidad de un servidor Web, incluso la gran mayoria de funciones puede ser utilizada para hacer pequeñas tareas ó grandes, que funcionen en modo consola.

El aprovechamiento de algunas funciones como la extensión PCNTL (solo Linux) http://www.php.net/manual/es/ref.pcntl.php permiten trabajar PHP en un entorno multi-hilado.

Saludos
Así es ..

Pero realmente cuando el proceso es ejecutado bajo un servidor HTTP ("web") .. ahí perdemos todo ese tipo de funcionalidades.

Es decir, .. podría crear ese script en modo CLI y lanzarlo por otra vía su ejecución. Bueno .. de hecho podría (enrredada la solución) ejuctar un script de estas características vía exec().

Ahora el tema del control de "hilos" .. realmente lo desconozco, intento usar funcionalidades que puedan funcionar en cualquier S.O. del servidor por eso no le suelo prestar mucha atención a funcionalidades que sólo funcionan bajo cierto S.O. .. el día que por A o B motivo he de usar otro S.O. ahí se me "destuye mi castillo de naipes" .. Pero .. si eso puede resolver su problema y cumple los requisitos: S.O. Linux, la extensión adecuada instalada .. etc .. OK bienvenido sea.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:22.