Servidor y Cliente en AjSharp Distribuido

En mis anteriores posts:

AjSharp Distribuido: un Roadmap
Distributed AjSharp: a Roadmap
AjSharp Distribuido: Primeros pasos
Distributed AjSharp: First Steps

escribí una breve descripción de lo que quiero para un AjSharp distribuido (mi intérprete de código abierto), y mostré unas pocas “screenshots” de programas en ejecución distribuida. Examinemos y corramos un ejemplo simple pero concreto.

Podemos lanzar el intérprete interactivo con el comando de línea

AjSharp.Console

Podemos agregar una lista de archivos .ajs con código fuente, para ser ejecutados inmediatamente:

AjSharp.Console program1.ajs program2.ajs

La idea, en este primer ejemplo distribuido, es lanzar dos instancias del intérprete, y en una, lanzar un servidor, y en otra lanzar un programa cliente que se comunique con el servidor. Ni bien tenga la conexión con éste, el programa cliente envía comandos a ejecutar en el servidor.

Primero, el código del programa servidor:

server = new RemotingHostServer(10000, "Server");
PrintLine("Server started");


La clase interna RemotingHostServer lanza un servidor de remoting. El primer parámetro es la puerta TCP, y el segundo parámetro el nombre lógico del servidor. Se pueden lanzar varios servidores en la misma instancia del intérprete. En nuestro ejemplo, sólo necesitaremos uno.



Ahora, el código para el nodo cliente:



remote = new RemotingHostClient("localhost", 10000, "Server");
at remote PrintLine("New Node");
nodeid = System.Guid.NewGuid().ToString();
// evaluate a subroutine at server
at remote 
	sub(id)
	{
		for (k=1; k<=10; k++)
			PrintLine("Hello, server, from node " + id);
	}
	with (nodeid); // local parameter going to server
	
exit;


El objeto RemotingHostClient conecta con un servidor. Su constructor toma el nombre de la máquina destino, el puerto de TCP a usar, y el nombre lógico del servidor. Usando esos parámetros, internamente arma una dirección de remoting, usando un canal TCP.



Ahora que tenemos una conexión, con el comando at ejecutamos un comando en el servidor remoto. La sintaxis es:



at <server> <cmd>



Entonces



at remote PrintLine(“New Node”);



imprime un mensaje en la consola del servidor, no en el cliente. Otra variante es:



at <server> <functionorsub> with (<parameters>);



que evalúa una función o subrutina en el servidor, pasando una lista de parámetros cuyos valores se evalúan en el ambiente del cliente.



Preparé un ejemplo empaquedo, con el AjSharp ya compilado, que se puede bajar de mi Skydrive: AjSharpDistributed01.zip.



En una consola del sistema operativo, ejecutar



StartServer.cmd



Este comando arranca una nueva consola, que ejecuta el código Server.ajs.



Para ejecutar un nodo cliente



RunNode.cmd



Este es la típica salida en el código del servidor, luego de lanzar dos nodos:





Como siempre, pueden bajar el código completo desde:



http://code.google.com/p/ajcodekatas/source/browse/



en el directorio trunk/AjLanguage. Estoy escribiendo más ejemplos distribuidos: ejecutar un archivo de código fuente local en el servidor, ejecutar código en un servidor cuando un nuevo servidor informa su existencia, agentes distribuidos, etc…



Nos leemos!



Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 12677, 13751, 1389, 8870, 8926. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>