Saturday January 17, 2004
JavatadasBlog de Alvaro Zabala
JAVA.NIO ¿Lo usa alguien en un entorno de producción?
A mi me está deparando sorpresas con la ultima version de JDK.
[SERVIDOR PRINCIPAL]
[CONEXION] El problema de todo esto es que creo un thread por socket, así que conforme crezcan los clientes los recursos de servidor se disparan. Solucion: Patrón de diseño THREADPOOL y lecturas no bloqueantes O eso creia. La idea es tener un Pool de Threads, y que N threads den servicios a todas las conexiones físicas (sockets). Todos los threads van quitando las conexiones de una cola (si esta vacía se suspenden hasta que otro thread no añada otra conexion) mirá si hay peticion (String action = socket.readUtf()), y si no la hay, con sockets no bloqueantes readUtf() devuelve nada luego ponemos la conexion al final de la cola y miramos en otra. ESTA NO ES LA SOLUCION. Para entornos atomicos tipo SERVIDOR WEB seguramente si. En este tipo de entorno, SE GASTA CANTIDAD DE CPU NADA MAS QUE VIENDO SI HAY ALGO. Espera activa. Total, que tras ver esto, quise configurar los sockets a bloqueantes, y me he encontrado un bug muy curioso. CON JAVA.NIO UN CHANNEL OBTENIDO DE UN SOCKET BLOQUEANTE SE CONVIERTE EN NO BLOQUEANTE TRANSCURRIDO UN TIEMPO DIOS SABE POR QUÉ. Esto hace que las conexiones recorran el ciclo de while(seguir) a lo bestia. Y esto es porque el readString() ya no bloquea. SOLUCIONES:
URL de la referencia: http://weblogs.javahispano.org/pacopaco/entry/java_nio
Comentarios:
Enviar un comentario: |
Para saber mas... alvaro_zabala@hotmail.com Calendar
Links
NavigationReferersLas visitas de hoy a la página: 49 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||