Foros del Web » Programando para Internet » PHP »

Problema con Sockets (stream_socket_client) Procesos sin Terminar

Estas en el tema de Problema con Sockets (stream_socket_client) Procesos sin Terminar en el foro de PHP en Foros del Web. TEngo el Siguiente Code de Ejemplo Código PHP: <?php   //coded by OzX Undersecurity.net   $hosts [] =  "terra.cl" ; //Otros Sitios mas, (por problemas de spam del foro no puedo postear mas link) //Genero 30 Peticiones Simultaneas      $data  =  "" ; $timeout  ...
  #1 (permalink)  
Antiguo 21/03/2009, 14:42
0zx
 
Fecha de Ingreso: marzo-2009
Mensajes: 5
Antigüedad: 15 años, 2 meses
Puntos: 0
De acuerdo Problema con Sockets (stream_socket_client) Procesos sin Terminar

TEngo el Siguiente Code de Ejemplo

Código PHP:
<?php
 
//coded by OzX Undersecurity.net
 
$hosts[] = "terra.cl";
//Otros Sitios mas, (por problemas de spam del foro no puedo postear mas link)
//Genero 30 Peticiones Simultaneas 
 
 
$data "";
$timeout 15;
$sockets = array();
 
 
#Asignamos Los sockets Creados a un Array 
foreach ($hosts as $id => $host) {
    
$sockets[$id] = stream_socket_client("$host:80"$errno$errstr$timeoutSTREAM_CLIENT_ASYNC_CONNECT);
}
#=================================================
$total count($sockets); //Contamos el Total de Socket Creados
 
for($x=0;$x<$total;$x++){ // Creamos el Ciclo para Realizar las Peticiones
    
$write $sockets//Se Copia el array de sockets a write, en cada ciclo este sera 1 menos.
    
$n stream_select($r=null$write$e null$timeout); //establecemos y selecionamos un socket.
    
echo "[+] HOST :".$hosts[$x]."\n";
    if (
$n 0) { //si existen cambios (si quedan socket por procesar)then...
                
$packet  "GET /index.php HTTP/1.1\r\n";//Headers
                
$packet .= "Host: ".$hosts[$x]."\r\n";    //Headers
                
$packet .= "Connection: close\r\n\r\n";    //Headers
                
fwrite($sockets[$x],$packet);    //Enviamos la Peticion
                 
while (!feof($sockets[$x])) {
                       
$data .= fgets($sockets[$x], 128); //Obtenemos el Code Source
                                     
}
                 echo 
strlen($data)."\n"//Contamos el Total (Solo Test)
                
fclose($sockets[$x]); //Cerramos Conexion
                
$data "";
                
/*Borramos en el Array La peticion recien pasada para que en el siguiente */
                
unset($sockets[$x]); 
 
 
    }
}
 
 
?>

Resultado en Tcpview
i39.tinypic.com/2dlm7o1.png


En windows no esta habilitado fork por defecto como en los sistema unix, que se puede hacer un "fork" y hacer todo esto muxo mas facil.


Resulta que Creo todos Estos Procesos, Obtengo su codigo Fuente y TOdo Perfecto, pero se me crean Procesos en estado Time_Wait

Los cuales a los 30 segundos se Terminan.

No Tengo problema al Ejecutar 1 vez el script, pero si lo ejecuto constantemente que es lo que deseo, la Cola de procesos en time_wait, es enorme..

Estoy haciendo un Crawler Para la realizacion de un Sitemap que sea realmente Rapido. y que no se demora horas en terminar.

¿Como Podria? Terminar Estos proceos?

IMG de los procesos.
i40.tinypic.com/dv4lx.png



¿alguien sabe como ?

Saludos¡
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:40.