[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