Ver Mensaje Individual
  #6 (permalink)  
Antiguo 30/12/2011, 19:21
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
Escribes en un canal un comando por ejemplo numLs con una función enviarComando y recibes el resultado por otra furnción recibirRespuesta(int codigo, String respuesta).
Esa parte si la había entendido, es decir, enviar y recibir por un socket de forma asíncrona, a lo que yo me refería era si el programa hacía algo más, si el programa envía y espera la respuesta entonces es un solo hilo que se manda y después se detiene a esperar; si envía en cualquier comento y recibe en cualquier momento entonces son dos hilos uno dedicado a enviar y otro a recibir.

Si necesitas que se comunique un hilo con el otro busca información sobre las clases que mencioné anteriormente puesto que resultan muy útiles para eso.

Cita:
Iniciado por ping_86 Ver Mensaje
Por otro lado se pretende integrar este programilla en una formato web, por lo que las peticiones se hacer a un Servidor.java, que crea un thread por cada petición, coje el prgrama anterior y envia el comandoLS y espera por la respuesta y a continuación la muestra. ...
De nuevo, si manda un comando y después se detiene a esperar y no hace nada mas pues solo necesitas un hilo para realizar ese procedimiento, uno por cada socket. Si necesitas un montón de hilos enviando y esperando la respuesta, solo tendrías que pensar en la cantidad de hilos que vas a manejar.

Cita:
Iniciado por ping_86 Ver Mensaje
Por lo que dices veo que es mejor NIO puesto que como tenia pensado (productor/consumidor) bloquearía el programa mientras espera por la respuesta, mientras con el otro no (corrígeme si me equivoco)
Con los dos métodos puedes lograr sockets que no bloqueen, es decir, con producer/consumer puedes crear un hilo aparte para leer y ese hilo es el único que se va a quedar bloqueado mientras espera la respuesta. Con NIO tienes que registrarte para recibir eventos del socket cuando lea, pero no bloquea.

Pero todo depende del objetivo de tu aplicación, si no es necesario que el programa haga algo mientras espera pues solamente necesitas un hilo con un socket normal. Ahora si quieres que el programa envíe X comandos eventualmente en un intervalo de tiempo indefinido y reciba N respuestas de igual forma eventualmente sin un tiempo definido y posiblemente intercalando envíos y respuestas, entonces necesitas dos hilos, uno que envía y otro que recibe o usar NIO en un solo hilo.

La ventaja de NIO es que no necesitas mas que un hilo para recibir y enviar, y por consiguiente no necesitas sincronizar los hilos, la desventaja es que es un poco complicado aprenderlo a usar.

Saludos,