[bcn-pm] Enviar un objeto a un proceso hijo
Gabriel Perez S.
gperezarunsolutions.com
Div Mar 31 03:54:44 PST 2006
Hola a todos,
Estoy trabajando en un demonio que tiene que conectar por TCP a un servidor
que le envía texto plano cada vez que ocurre un evento. A su ves, esta
aplicación tendría que estar escuchando un puerto al que se conectarán con
una pequeña aplicación en java. El motivo de construir este demonio es que
haga de -pasarela- entre el demonio que envía los eventos y los clientes java
(seguridad, autentificación de usuarios, etc..).
Lo que hice fue:
- Script "central" que hace un fork, creando un hijo, que se encarga de
conectar con el demonio que envía los eventos.
- El mismo script "central" realiza un "listen" para recibir a los clientes,
en cada conexión de cada cliente se crea un hijo.
Esto lo hice "bien", el problema que tengo es que yo quiero enviar a los
hijos algunos de los eventos que recibo del demonio pero la variable donde
"meto" el socket que se conecta con el demonio de los eventos no la pueden ve
los hijos (como es lógico, son otro proceso, otro pid). Para -solucionar-
esto cree otro objeto "pakage" que se llama GLOBAL (esta en el script
central) y este deberia ser el sitio donde se guarden los eventos enviados
por el demonio y los hijos deberían verlo. La idea, es que lo vean todos, el
script central y el demonio de los eventos para enviarle lo que le toca a
cada hijo.
Cuando hice las pruebas; llamaba al objeto para introducir texto en un array,
y a la ves, para saber que lo hacia bien, imprimía lo mismo que guardaba en
el array en un archivo con el $$ por delante, asi sabia que PID lo estaba
haciendo.
Lo hice mas o menos asi:
[seudo-code]
use IO::Socket;
use GLOBAL; <-- donde quiero que puedan acceder todos
$GLOBAL = GLOBAL;
fork;
&eventos($GLOBAL);
exit 0;
$child = IO::Socket::new......
if $child = 0 fork;
&child($child,$GLOBAL);
exit;
sub child {
my $GLOBAL = $_[0];
while (<$child>) {
.....
print $child $GLOBAL->leer;
}
}
sub eventos {
my $GLOBAL = $_[0];
$socket = ..... host=>blabla.com, port....
while ($sock) {
....
$GLOBAL->guardar("el texto");
}
}
[/seudo-code]
¿Se puede hacer esto de alguna manera?
¿Que parte de la teoría no estoy entendiendo bien?
- Según yo: tiene que existir alguna manera de mantener comunicados a hijos y
padres sin hacer que se conecten entre sí por unix socket o tcp/udp. ¿No?
Un saludo.
Gabriel.
Més informació de la llista de correu Barcelona-pm