Alternativa correcta (socket daemon)
Hector Salinas
hsalinas en bsf.cl
Vie Ene 23 16:02:50 CLST 2009
Alvaro Herrera escribió:
> Hector Salinas escribió:
>
>> #!/usr/bin/php -q
>> <?php
>> set_time_limit (0);
>> $address = '192.168.1.235';
>> $port = 5000;
>> $sock = socket_create(AF_INET, SOCK_STREAM, 0);
>> socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, SOL_TCP);
>> socket_bind($sock, $address, $port) or die('error bind en la ip');
>> socket_listen($sock);
>> while (true)
>> {
>> $client = socket_accept($sock);
>> socket_getpeername($client, $ip);
>> $input = socket_read($client, 10);
>> echo "\n*******************************";
>> echo "\nNew client connected: {$ip}";
>> echo "\nmemoria usada -->".memory_get_usage();
>> socket_write($client, "A");
>> unset($client);
>> unset($input);
>> $contador++;
>> }
>> socket_close($sock);
>> ?>
>
> Hmm, leyendo la pagina sobre variables en el manual de PHP te
> recomendaria que pusieras las variables que son "locales" dentro de una
> funcion. No queda para nada claro que la memoria se libere al hacer un
> "unset". O sea, algo asi:
>
> #!/usr/bin/php -q
> <?php
>
> function do_client_stuff( ... )
> {
> $client = socket_accept($sock);
> socket_getpeername($client, $ip);
> $input = socket_read($client, 10);
> echo "\n*******************************";
> echo "\nNew client connected: {$ip}";
> socket_write($client, "A");
> socket_close($client);
> }
>
> set_time_limit (0);
> $address = '192.168.1.235';
> $port = 5000;
> $sock = socket_create(AF_INET, SOCK_STREAM, 0);
> socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, SOL_TCP);
> socket_bind($sock, $address, $port) or die('error bind en la ip');
> socket_listen($sock);
> while (true)
> {
> do_client_stuff($sock);
> $contador++;
> echo "\nmemoria usada -->".memory_get_usage();
> }
> socket_close($sock);
> ?>
>
ok, estube testieando este script y sigo con el drama del
incremento de memory, creo debe ser al bug de las funciones socket*
Más información sobre la lista de distribución Linux