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

Implementar cliente de chat en Java

Estas en el tema de Implementar cliente de chat en Java en el foro de Java en Foros del Web. Hola! Estoy implementando un cliente de chat en Java y me ha surgido un problema: no sé cómo notificar al applet de la interfaz la ...
  #1 (permalink)  
Antiguo 12/03/2007, 12:04
 
Fecha de Ingreso: marzo-2007
Mensajes: 5
Antigüedad: 17 años, 9 meses
Puntos: 0
Implementar cliente de chat en Java

Hola!

Estoy implementando un cliente de chat en Java y me ha surgido un problema: no sé cómo notificar al applet de la interfaz la recepción de un nuevo mensaje desde el servidor, ya que la llamada a la función que recibe mensajes desde el socket es bloqueante y no puedo dejar la aplicación bloqueada a la espera de recibir mensajes.

He barajado las siguientes opciones, pero ninguna me convence del todo:

1) Crear dos hebras, una lectora y otra escritora. Así, la hebra lectora podrá bloquearse sin problemas mientras no haya mensajes nuevos. El problema, es que no sé cómo comunicar esta hebra con el applet.

2) Usar una única hebra dirigida por eventos. En principio, mi idea era notificar la llegada de un nuevo mensaje con la generación de un evento que sería atendido con el applet de forma similar a como se hace con los eventos de teclas pulsadas y demás. El problema es que no sé dónde generar ese evento, ya que si creo una función que compruebe si llega algo al socket ésta bloqueará todo el programa.

Alguien puede ayudarme?

Muchas gracias
  #2 (permalink)  
Antiguo 12/03/2007, 12:48
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Re: Implementar cliente de chat en Java

Los eventos de teclado etc. los gestionan igual las librerías de Swing, con distintas hebras/Threads etc.

Una opcion para evitar el tema bloqueante es meterse a saco con el nuevo API Java NIO, que es un API de E/S que permite conexiones no bloqueantes, aunque la gestión de sockets es bastante más compleja.

Por otro lado, la comunicación con el applet de una hebra que quede bloqueda a la espera de eventos no debería ser ningún problema. La estrategia habitual es pasarle una referencia del applet a la hebra cuando se crea, en el constructor, y usar esta referencia para notificar al applet en caso de evento, a través de algún metodo sincronizado normalmente.

Para hacer una aplicacion/applet Swing más alla de una demo, hay que manejar con soltura el tema de las hebras para evitar dejar bloqueada la interfaz excepto lo imprescindible, así que no tengas miedo en meterte con ello por que es algo que se debería conocer.

Un saludo.

PD: Un ejemplo de aplicacion, JWS en vez de applet pero pal caso..., que usa hebras, aunque no se bloqueen, para hacer cosas y luego notificar a la aplicacion padre:
https://mw4serverseeker.dev.java.net/
Puedes ver en esta clase:
https://mw4serverseeker.dev.java.net....3&view=markup
como se le pasa una referencia al panel padre, parentPanel, para poder actualizar datos cuando los consigue.

PPD: Una opcion para no tener que gestionar tu las colas de clientes esperando notificación etc sería usar JMS para las comunicaciones, y así ahorrarte el meterte a saco con sockets .
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 02:16.