Foros del Web » Programación para mayores de 30 ;) » Java »

Aplicaciones Cliente/Servidor

Estas en el tema de Aplicaciones Cliente/Servidor en el foro de Java en Foros del Web. Hola a todos! Estoy empezando a desarrollar aplicaciones Cliente/Servidor para crear juegos sencillos. Lo primero que he hecho es probar el tema de los sockets, ...
  #1 (permalink)  
Antiguo 28/03/2012, 05:05
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años
Puntos: 3
Aplicaciones Cliente/Servidor

Hola a todos!
Estoy empezando a desarrollar aplicaciones Cliente/Servidor para crear juegos sencillos. Lo primero que he hecho es probar el tema de los sockets, y ya he hecho una aplicacion que conecta un único usuario al servidor.

Ahora quiero realizar un juego en el que haya una base de datos en el servidor, y varios usuarios se conecten simultaneamente y reciban/modifiquen datos de la BDD a través del servidor. Me encuentro con la duda de cómo escuchar peticiones y responderlas de varios clientes simultaneamente, teniendo en cuenta que cada uno puede tener una necesidad distinta. Se me ha ocurrido crear un hilo por cliente, pero se que siempre se debe evitar usar hilos.
A ver si me podeis pasar manuales/tutoriales sobre el tema, o decirme por dónde debo empezar.

Gracias de antemano!
  #2 (permalink)  
Antiguo 28/03/2012, 06:37
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Respuesta: Aplicaciones Cliente/Servidor

Cita:
Iniciado por aemaru08 Ver Mensaje
Hola a todos!
Se me ha ocurrido crear un hilo por cliente, pero se que siempre se debe evitar usar hilos.
No se de donde sacaste esa informacion, pero nada mas alejado de la realidad.

Muy por el contrario hoy por hoy debemos enfocar nuestras aplicaciones al suo de hilos ya que de otro modo perdemos la capacidad de usar mas de un nucleo en los procesadores.

Por otro lado desde mucho antes de la aparicion de los procesadores multi core ya se recomendaba aprovechar la capacidad del multithreading.

Respondiendo a tu pregunta usar hilos es exactamente lo que necesitas hacer.

Un ejemplo sencillo:
Código PHP:
ServerSocket server = new ServerSocket(9000);

while (
true) {
    
Socket client server.accept();
    
    new 
Thread(new ClientHandler(client)).start();

Luego la clase ClientHandler debe ser un hilo (extender a Thread o implementar Runnable) y en ella haces todo lo que se necesite con tu cliente.

Ejemplo:
Código PHP:
public class ClientHandler implements Runnable {
   private 
Socket client;

   public 
ClientHandler(Socket client) {
        
super();
        
this.client client;
    }

    public 
void run() {
        try {
            try {
                
this.client.getOutputStream().write(new String("Conexion correcta").getBytes());
            } catch (
IOException ioe) {
                 
ioe.printStackTrace();
            }
        } 
finally {
            try {
this.client.close();} catch (Exception e) {}
        }
    }

Espero esto te sea de ayuda.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 28/03/2012, 06:39
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Aplicaciones Cliente/Servidor

Hola:

La solución estándar es esa, un hilo por cliente. No sé por qué dices que se debe evitar usar hilos. Los hilos es como todo, sirven para determinadas cosas y hay que usarlos cuando es necesario y evitarlos si no es necesario, por aquello de no matar moscas a cañonazos.

Para atender varios clientes hay varias aproximaciones, pero la de hilos es la más normal.
- Puedes tener un solo hilo e ir por turnos atendiendo a los clientes. Esto introduce retardos en el cliente, puesto que debe esperar que le toque su turno.
- Puedes poner hilos, uno por cliente.

En este enlace tienes un ejemplo con hilos http://www.chuidiang.com/java/socket...cket_hilos.php

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 28/03/2012, 07:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 16
Antigüedad: 15 años
Puntos: 3
Respuesta: Aplicaciones Cliente/Servidor

Muchas gracias a ambos por vuestras respuestas. La cosa es que yo tanto en Java como en programación me he iniciado hace muy poco, y mi profesor siempre me ha recomendado evadir el uso de hilos, entre otras razones por lo que el llamaba "la indeterminacion de ejecucion", en otras palabras por que según el no se podia controlar del todo el inicio y flujo de los hilos. Hay que tener en cuenta que las aplicaciones que el me enseñaba a hacer no tenian nada que ver con videojuegos, tal vez sea por eso...

Me gustaria entonces saber recomendaciones de cuando/para que usar hilos, (asi de manera general), y hasta que límites usarlos. Yo recuerdo por ejemplo crear una aplicacion que por cada hilo creaba un array de 200 posiciones con 2 variables por posicion y un metodo que cambiaba las variables cada 600ms, y con 5-6 hilos la cosa se petaba.

Etiquetas: aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:48.