Pregunta

Estoy diseñando una aplicación donde muchos clientes se conectan a un servidor central. Este servidor mantiene estas conexiones, enviando mensajes vivos cada media hora. El servidor tiene un servidor HTTP incorporado, que proporciona una interfaz para las conexiones del cliente (por ejemplo, http: // server / isClientConnected ? id = id ). Me preguntaba cuál es la mejor manera de hacer esto. Mi implementación actual está en Java, y solo tengo un Mapa con ID como clave, pero se inicia un hilo para cada conexión, y no sé si esta es realmente la mejor manera de hacerlo. Cualquier sugerencia sería apreciada.
Gracias Isaac Waller

¿Fue útil?

Solución

Utilice el paquete java.nio, como se describe en esta página: Creación de servidores altamente escalables con Java NIO . Lea también esta página con mucho cuidado: Arquitectura de un servidor basado en NIO altamente escalable .

Personalmente, no me molestaría con los componentes internos de NIO y usaría un marco como Apache MINA o xSocket . NIO es complicado y fácil de equivocarse de maneras muy oscuras. Si quiere que & Quot; solo trabaje & Quot ;, luego use un marco.

Otros consejos

Con un solo hilo por conexión, generalmente puede escalar hasta aproximadamente 10,000 conexiones en una sola máquina. Para una máquina con Windows 32, probablemente alcanzará un límite de alrededor de 1,000 conexiones.

Para evitar esto, puede cambiar el diseño de su programa o puede escalar (horizontalmente). Debe sopesar el costo del desarrollo con el costo del hardware.

El subproceso único por usuario, con una única conexión continua, suele ser el modelo de programación más sencillo. Me quedaría con este modelo hasta que alcance los límites de su hardware actual. En ese momento, decidiría cambiar el código o agregar más hardware.

Si los clientes estarán conectados durante largos períodos de tiempo, asignar un hilo por cliente puede ser problemático. Cada subproceso en el servidor requiere una cierta cantidad de recursos (memoria para la pila, por ejemplo).

Puede usar Jetty Continuations para manejar la solicitud del cliente con menos hilos utilizando servlets asíncronos.

Lea más sobre el patrón Reactor. Hay una implementación para eso en Java (usa canales en lugar de hilo para el cliente). Es fácil de implementar y muy eficiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top