Alternativa correcta (socket daemon)

Aldrin Martoq amartoq en dcc.uchile.cl
Jue Ene 22 15:09:37 CLST 2009


On Thu, 2009-01-22 at 12:31 -0300, Hector Salinas wrote:
>  Hace un mes que tengo leyendo sobre la programacion al socket
>  y sobre deamon En linux. Resulta que  realice un aplicaci贸n (o
>  peque帽o script) que escucha en el puerto 5000 (socket) Y esta
>  corriendo como demonio (la aplicaci贸n eschucha desde un tornique. 茅l
>  envia el codigo pdf147 a la aplicacion, la aplicaci贸n Consulta al
>  DBMS(mysql). si exite el persona devuelve una "A" al torniquete para
>  activarlo, de lo contrario La persona no entra). Hasta este punto
>  todo Bien

Bien, se ve facil.

>  El drama que tengo es el siguiente(o no se sin tan drama). La 
>  aplicaci贸n la realice con PHP-Cli (era lo que 	mas tenia a mano Ya que
>  si no se hacia un aplicaci贸n rapidamente, se implentaba con la que
>  venia con el torniquete y esta esta hecha en VB 6 :( ) por
>  alguna extra帽a razon el script deja defunciona como demonio y tengo
>  que volve a ejecutar para que continue escuchando al
>  torniquete y eso me tiene loco (y llego a la conclusion De que
>  php-cli no me sirve).

Puedes agregar tu script PHP en /etc/inetd.conf y lo programas como si
lee/escribe desde la entrada estandar. Ejemplo en BASH:



amartoq en videopodcast:~$ tail -1 /etc/inetd.conf 
9876 stream tcp nowait nobody /home/amartoq/ej.sh

amartoq en videopodcast:~$ cat /home/amartoq/ej.sh 
#!/bin/bash

echo -n "Bienvenido.. su nombre? "
read NOMBRE
echo "HOLA $NOMBRE"

amartoq en videopodcast:~$ telnet localhost 9876
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Bienvenido.. su nombre? Aldrin
HOLA Aldrin
Connection closed by foreign host.



> El OS que esta corriendo es CentOS 5.2 (como me gusta esta distro) al dia	
> Las preguntas  son
> 1.- 驴 la ca/&卢鈧瑍#路 en hacerlo en php-cli?

No necesariamente...

> 2.- 驴 que lenguaje tendria que usar para este tipo de uso (c, java, python o algun otro que desconosco) ?

Yo te recomiendo python (es realmente facil y elegante, no te costara
aprender). Lo que tienes que hacer:

1.- escribir una funcion que haga la pega y probarla
2.- embutir la funcion en un servidor socket. Ejemplo:
http://danieldandrada.blogspot.com/2007/09/python-socketserverthreadingtcpserver.html
3.- poner tu programa en /etc/inittab; asi se levanta automaticamente


La diferencia con el ejemplo bash/inetd es que esto sera un poco mas
"performante" y aprenderas python de paso ;)

-- 
Aldrin Martoq <amartoq en dcc.uchile.cl>
http://aldrin.martoq.cl/videopodcast/ http://aldrin.martoq.cl/techblog/
------------ pr髕ima parte ------------
Se ha borrado un mensaje que no est谩 en formato texto plano...
Nombre     : no disponible
Tipo       : application/pgp-signature
Tama帽o     : 197 bytes
Descripci贸n: This is a digitally signed message part
Url        : http://listas.inf.utfsm.cl/pipermail/linux/attachments/20090122/eded28f3/attachment.bin


M醩 informaci髇 sobre la lista de distribuci髇 Linux