BTW {Alternativa correcta (socket daemon)}

Rodrigo Fuentealba the.code.keeper en gmail.com
Vie Ene 23 21:58:31 CLST 2009


El día 23 de enero de 2009 20:46, Hector Salinas <hsalinas en bsf.cl> escribió:
> Alvaro Herrera escribió:
>>
>> Hector Salinas escribió:
>>>
>>> Alvaro Herrera escribió:
>>
>>> ok, estube testieando este script y sigo con el drama del
>>> incremento de memory, creo debe ser al bug de las funciones socket*
>>
>> Otra idea: declara las variables como "static" dentro de la funcion.
>>
>>>> #!/usr/bin/php -q
>>>> <?php
>>>>
>>>> function do_client_stuff( ... )
>>>> {
>>
>>        static $client, $input, $ip;
>>
>>>>         $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);
>>>> }
>>
>>
>> BTW a estas alturas, yo ya tengo más que claro que el problema es lo
>> penca que es PHP, y posiblemente tu programa funcionaría sin problemas
>> en un lenguaje bien implementado.

Bueno, hay mejores cosas para trabajar con sockets que PHP;
Concretamente, creo que ese programa sería mucho más fácil con Python
o Ruby. Y habría una solución más seria.

PHP es: "PHP: Hypertext Preprocessor"; a diferencia de Python, Ruby,
Java y otros lenguajes,
éste tiene una finalidad precisa: "preprocesar hipertexto". Las demás
"challas" que tiene funcionan bien para el dueño y están arriba por si
alguien las quiere usar... pero es mucho más serio dejarlas a un lado.
Acá estamos experimentando con pcntl() y es horrible.

Hacer un demonio en PHP es... sencillamente una horrible idea; te compadezco.

> solucion voy a tenerlo que hacerlo en otro lenguaje, me voy a inclinar por
> python (espero que no pase lo mismo con los objetos socket)

Un daemon en Python o Ruby se ve bastante bueno.

Para Ruby, mira en Ruby on Rails el código de /script/server.

> ps : solucion temporal (hasta termine el nuevo script testiado y terminado)
> botarlo con crond cada 2 hora el script. No puedo dejar sin que funciones el
> torniquete

Ouch.

-- 
Rodrigo Fuentealba
http://www.thecodekeeper.net/



Más información sobre la lista de distribución Linux