socket setsotimeout net multiple example clients java tcp network-programming netty serversocket

java - net - setsotimeout



¿Beneficios de Netty sobre el servidor ServerSocket básico? (3)

Creo que los beneficios de usar netty no son inmediatos, sino que llegan más tarde cuando los requisitos cambian y el mantenimiento se vuelve más complejo para su proyecto. Netty proporciona una comprensión integrada del protocolo HTTP para que pueda proporcionar servicios web RESTful simples . También tiene la opción de utilizar el procesamiento asíncrono de solicitudes que Netty proporciona como marco para que potencialmente pueda obtener un mejor rendimiento y atender varios pedidos de magnitud más solicitudes simultáneas.

Necesito crear un servidor tcp / ip de Java relativamente simple y tengo algunos problemas para determinar si debo usar algo como Netty o simplemente usar ServerSocket y InputStream / OutputStream.

Realmente solo necesitamos escuchar una solicitud, luego pasar el nuevo cliente Socket a algún código de procesamiento en un nuevo hilo. Ese hilo terminará una vez que se complete el procesamiento y se envíe la respuesta.

Me gusta la idea de tuberías, decodificadores, etc. en Netty, pero para un escenario tan simple no parece que valga la pena el tiempo de desarrollo agregado. Parece un poco excesivo para nuestros requisitos iniciales, pero estoy un poco nervioso de que hay muchas cosas que no estoy considerando. ¿Cuáles son, si las hay, los beneficios de Netty para requisitos tan simples? ¿Qué es lo que no estoy considerando?


Primero, escriba la lógica de su servicio para que sea independiente de su capa de comunicación.

Como dijo Victor Sorokin, hay una ventaja de aprendizaje al hacerlo usted mismo. Así que debería valer la pena escribirlo con sockets. Implicará menos esfuerzo para comenzar, y si funciona lo suficientemente bien, entonces te irás a las carreras.

Si descubre que necesita más escalabilidad / robustez más adelante, puede cambiarse a netty. Simplemente escriba una nueva capa netty que se comunique con su capa de lógica de servicio y cámbiela.


La principal ventaja de Netty sobre la simple lectura y escritura de sockets mediante flujos es que Netty admite E / S asíncronas sin bloqueo (mediante la API NIO de Java); cuando utiliza secuencias para leer y escribir desde sockets (e inicia un nuevo hilo para cada conexión aceptada desde un ServerSocket ) está utilizando E / S síncrona de bloqueo.

El enfoque de Netty se escala mucho mejor, lo cual es importante si su sistema necesita poder manejar muchas (miles) de conexiones al mismo tiempo. Si su sistema no necesita escalar a muchas conexiones simultáneas, puede que no valga la pena usar un marco como Netty.

Más información de fondo: los hilos son recursos relativamente caros en un sistema operativo. Cada hilo necesita memoria para la pila (que puede tener, por ejemplo, 2 MB de tamaño). Cuando crees miles de hilos, esto te va a costar mucha memoria; Además, los sistemas operativos tienen límites en el número de subprocesos que se pueden crear. Por lo tanto, no desea iniciar un nuevo hilo para cada conexión aceptada. La idea de la E / S asíncrona es desacoplar los hilos de las conexiones (sin relación uno a uno). Puede haber muchas más conexiones que subprocesos, y cada vez que ocurre un evento en una de las conexiones (por ejemplo, se reciben datos), un subproceso de un grupo de subprocesos se usa temporalmente para controlar el evento.