Foros del Web » Programando para Internet » PHP »

Servidor con sockets multihilo

Estas en el tema de Servidor con sockets multihilo en el foro de PHP en Foros del Web. Buenas a todos, Llevo tiempo buscando como implementar un servidor con sockets en php que sea realmente multitarea pero no logro encontrar información. El problema ...
  #1 (permalink)  
Antiguo 10/06/2009, 03:36
 
Fecha de Ingreso: noviembre-2005
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 0
Servidor con sockets multihilo

Buenas a todos,

Llevo tiempo buscando como implementar un servidor con sockets en php que sea realmente multitarea pero no logro encontrar información.

El problema es que tengo el siguiente código:

Código PHP:
// CODIGO DEL SERVIDOR
$socket socket_createAF_INETSOCK_STREAMSOL_TCP );
socket_bind $socket'localhost',  2222 );
socket_listen $socket );
socket_set_nonblock $socket );  // No bloqueante

while( true ) {
    
    if ( ( 
$peticion = @socket_accept$socket ) ) !== false ) {
        
        
$msg socket_read $peticion2048 );    
        
        
// Hilo de ejecución
        
        
@shell_exec'php core.php' );  ///// Punto conflictivo //////
    
        //socket_write ( $peticion, $respuesta, strlen($respuesta) );

    
}
    
    
usleep 100000 ); // 100 milisegundos
    
}

socket_shutdown($socket);
socket_close($socket); 

Lo que quiero conseguir es que cuando el servidor reciba una petición, este ejecute un proceso php que lance el fichero core.php y se olvide ya de procesar la petición del cliente, ya que esta debe de ser procesada por el proceso core.php.

Así, el servidor queda liberado de la tarea de procesar las peticiones y se dedica solamente a aceptarlas por medio del socket.

El problema es que el descriptor del socket lo genera el servidor (el código de más arriba) en $peticion, pero no encuentro la manera de pasar ese descriptor a core.php para que sea el proceso que ejecuta este fichero el que realice el socket_write que está comentado en el código.

No quiero que el socket_write lo realize el servidor porque si la ejecución del subproceso core.php dura 10 segundos el servidor esperará esos 10 segundos a obtener la respuesta de shell_exec y quedará bloqueado durante ese tiempo sin aceptar peticiones entrantes.

Estoy empezando a pensar ya que no va a ser posible hacerlo, porque ambos procesos no comparten espacio de memoria y por tanto el descriptor abierto por el servidor no puede ser utilizado por el proceso lanzado por shell_exec (o proc_open), pero espero que alguien me pueda ayudar o aclarar esta duda.

Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 17/02/2012, 09:20
 
Fecha de Ingreso: febrero-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Servidor con sockets multihilo

Hola... mira yo lo hice de esta manera....el proceso core.php lo hago cliente socket....este lleva como parametro el indice del socket de peticion....en tu caso $peticion deberia ser un arreglo ....entonces cuando core termina llama al proceso ke lo genero enviando indice de $peticion para que lo retorne al cliente que corresponde y el mensaje solicitado...quizas no suene muy bien pero dejara al programa central solo a la escucha

Suerte
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 04:09.