Java - Un cliente frente a varios servidores.

 
Vista:

Un cliente frente a varios servidores.

Publicado por Adolfo Sanz (1 intervención) el 26/05/2006 11:46:19
Hola,
Tengo que hacer una aplicación que calcule el número pi. Los puntos serán creados al azar y utilizarán el círculo unidad para hacer una estimación.
El usuario dirá al cliente el número de puntos que desea generar. Así pues, el cliente recibirá ese número y lo distribuirá entre varios servidores. Los servidores harán los cálculos (debe trabajar simultáneamente) y enviarán de vuelta el resultado al cliente. Finalmente el cliente recopilará los datos que le han proporcionado los servidores y mostrará el valor final del pi. El número de servidores es un parámetro que se debe fijar en tiempo de programación, pero que debe fácilmente ser modificable.
He leído sobre un servidor y varios clientes; pero ahora es lo contrario. ¿Cómo puedo crear varios servidores simultáneamente? ¿Cómo puedo conectar a un cliente con varios servidores de modo que este haga los cálculos simultáneamente?
¿Ideas? ¿Referencias?
Estoy utilizando algo similar a esto:

import java.io.*;
import java.net.*;
class Client {
static final String HOST = "localhost";
static final int PORT=5000;
public Client( ) {
try{
Socket skClient = new Socket( HOST , Port );
InputStream aux = skClient.getInputStream();
DataInputStream flux = new DataInputStream( aux );
System.out.println( flux.readUTF() );
skClient.close();
} catch( Exception e ) {
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg ) {
new Client();
}
}


import java.io.* ;
import java.net.* ;
class Server {
static final int PORT=5000;
public Server( ) {
try {
ServerSocket skServer = new ServerSocket( PORT );
System.out.println("Listening at port " + PORT );
Socket skCliente = skServidor.accept(); // Crea objeto
/* CODE CALCULATE */
} catch( Exception e ) {
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg ) {
new Server();
}
}

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Un cliente frente a varios servidores.

Publicado por Juan Uribe (4 intervenciones) el 26/05/2006 21:00:29
Utiliza hilos para hacer el paralelismo, abres un hilo por cada conexión a servidor,

Defines un metodo que se encargue de la conexión y que escriba la respuesta en una posición específica de una estructura, ( la que corresponderia a cada servidor ), y ejecutas paralelamente la comunicación con cada servidor.

Además veo que en la forma como estas implementando tu servidor, no estas teniendo en cuenta que el objeto en memoria debe permanecer escuchando , sólo hace una linea de ejecución y no hace mas , deberia "permanecer escuchando".

Una vez corrijas la forma como debes implementar el servidor, la arquitectura de su software debe ser así

Una factoria de clases que se encargue de instanciar los n servidores para que escuchen por puertos distintos, a demanda. ( ésto lo debe hacer de forma desacoplada a tu cliente. (busca documentación por el metodo class.forName y cargadores de clases, son facilisimos de implementar)

El cliente está bien así como está, pero antes de hacer la invocación a los servidores, debes mirar la forma de subir los servidores que necesites, instanciando el cargador de la clases que te mencioné .

Ya para mejoras, me tendrias que contar que tan dinamico es el trabajo con los servidores, si necesitas una cantidad definida arriba, o si en tiempo de ejecución debes decidir cuantos subir.

No te doy código, porque sé que tu puedes, espero te halla servido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar