Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/12/2011, 19:55
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Funcion que devuelve el resulstado de un evento

Hola,

Cita:
Iniciado por ping_86 Ver Mensaje
... Tenemos una funcion, que envía un mensaje a un canal, luego existe otra fucnión que escucha las respuestas de ese canal.

Ahora bien no sabemos cuando va a llegar la respuesta, ni tenemos ningún control sobre el canal puesto que es un servicio externo.

la función envía la peticion al canal, y devuelve la respuesta, en caso de un error o un timeout devolver una excepción.

Alguna buena práctica o forma de realizar esto?
Buena práctica no estoy seguro, pero normalmente en las comunicaciones asíncronas se utilizan hilos diferentes sincronizados. Acá entran dos conceptos a tomar en cuenta,

¿Tu aplicación no hace otra cosa mas que esperar la respuesta o realiza otra actividad así como tiene una interfaz gráfica con un botón cancelar o algo por el estilo?
Si tu aplicación tiene una interfaz gráfica con un botón cancelar o realiza otra actividad mientras espera la respuesta entonces necesitas esperar la respuesta en un hilo independiente, una vez que este hilo obtuvo la respuesta ejecuta una acción o le avisa internamente al hilo principal con métodos sincronizados, mensajes u otros.

Sino es necesario realizar otra actividad en el intervalo de tiempo de espera entonces simplemente esperas la respuesta en el mismo hilo y se hace mucho mas fácil, aunque el programa se queda 'detenido' mientras espera.

Un método no aconsejado, en otros lenguajes se acostumbra hacer un 'barrido' temporizado, (como en el caso de C), cada X segundos o minutos el programa principal revisa si hay alguna respuesta, haya o no una respuesta continua con el programa principal, este método es muy antiguo y no es muy usado en Java.
¿Tu aplicación recibe la respuesta de un socket?
En las aplicaciones que usan sockets en Java se acostumbra usar un hilo que espera la respuesta, actualmente con NIO es preferible usar sockets que no bloquean. Es decir, el socket no espera una respuesta al leer sino que avisa llamando a un método cuando hay datos disponibles. En otras palabras tu aplicación recibe una notificación cuando ya hay datos.
Saludos,