¿Por qué utilizar Netty para desarrollar?
Netty es un marco de código abierto basado en Java NIO proporcionado por JBOSS. Netty proporciona aplicaciones y herramientas de red asincrónicas, sin bloqueo, controladas por eventos, de alto rendimiento, alta confiabilidad y altamente personalizables. utilizado para desarrollar servicios de terminal y cliente.
JAVA originalmente usaba BIO tradicional. ¿Por qué desarrolló NIO más tarde?
Primero observe el diagrama del modelo de subproceso tradicional basado en bloqueo sincrónico IO (BIO)
BIO tiene principalmente las siguientes deficiencias:
1. diagrama Se puede ver que una conexión tiene un subproceso. Dado que el número de subprocesos es limitado, este modelo consume muchos recursos.
Eventualmente no podrá soportar la demanda de conexiones con alta concurrencia
2. Bajo rendimiento, debido al cambio frecuente de contexto, lo que resulta en una baja utilización de CUP
3. Poca confiabilidad, porque todas las operaciones de IO son sincrónicas, incluso los subprocesos comerciales, por lo que los subprocesos comerciales IO. la operación también puede bloquearse.
Esto hará que el sistema dependa demasiado de la situación en tiempo real de la red y de las capacidades de procesamiento de los componentes externos, y la confiabilidad se reducirá considerablemente
Las razones anteriores son las que causaron la aparición temprana. Hay razones importantes por las que los servidores de alto rendimiento no usan JAVA para el desarrollo, sino que eligen C/C++.
Para resolver los problemas anteriores, nació NIO. El siguiente es el diagrama del modelo de subprocesos de NIO.
1. Selector, que puede registrar, escuchar y sondear al mismo tiempo
Cientos o miles de canales, de modo que un subproceso IO puede manejar muchas conexiones de clientes al mismo tiempo y el modelo de subproceso está optimizado a 1: N (N o M:N (M suele ser el número de núcleos CUP + 1) 2. Evita el cambio frecuente de contexto de subprocesos de IO y mejora la eficiencia de CUP 3. Todas las operaciones de IO son asincrónicas, por lo que las operaciones de IO de los subprocesos comerciales no tienen que preocuparse por el bloqueo. El sistema reduce las capacidades de procesamiento de las condiciones de la red en tiempo real y externas. componentes Dependencias ¿Por qué no utilizar el NIO nativo del JDK directamente pero elegir el marco Netty? Primero mire el diagrama de tiempo del servidor y el cliente en NIO de JDK Servidor: Cliente: Del diagrama Puede ver las deficiencias del uso de JDK nativo NIO 1. La biblioteca de clases y la API de NIO son bastante complejas. Para usarlas en el desarrollo, debe ser muy competente en Selector, ByteBuffer, ServerSocketChannel, SocketChannel. etc. 2. Se requieren muchas habilidades de programación adicionales para ayudar a usar NIO. Por ejemplo, debido a que NIO involucra el modelo de subprocesos Reactor, debe estar muy familiarizado con la programación de redes y subprocesos múltiples para escribir en alto nivel. programas NIO de calidad 3. Si desea tener una alta confiabilidad, la carga de trabajo y la dificultad son muy grandes, porque el servidor necesita enfrentar conexiones y desconexiones frecuentes de clientes, interrupciones de la red, lectura y escritura de medio paquete, y el almacenamiento en caché fallido, problemas de congestión de la red, afectarán seriamente nuestra confiabilidad y es bastante difícil resolverlos utilizando NIO nativo. 4. El famoso ERROR en JDK NIO: epoll sondeo vacío. Cuando select devuelve 0, provocará un sondeo vacío del Selector y provocará CUP100%. El funcionario dijo que este problema se solucionó después de JDK1.6. De hecho, es solo que la probabilidad de que ocurra se reduce y no existe una solución fundamental. Entonces, ¿por qué utilizar Netty? 1. La API es fácil de usar, más fácil de comenzar y el umbral de desarrollo es bajo. 2 Es potente, con múltiples funciones de códec preestablecidas y admite múltiples protocolos convencionales. 3. Alta capacidad de personalización, el marco de comunicación se puede ampliar de manera flexible a través de ChannelHandler. 4 Alto rendimiento, en comparación con varios marcos principales de NIO actuales, Netty tiene el rendimiento general más alto. 5. Alta estabilidad, resolviendo el ERROR de JDK NIO 6 Ha experimentado pruebas de aplicaciones comerciales a gran escala y su calidad y confiabilidad han sido bien verificadas. ¿Qué servicios puede proporcionar Netty? 1. Desarrollar aplicaciones de red TCP asíncronas sin bloqueo 2. Desarrollar aplicaciones de red UDP asíncronas sin bloqueo 3. p> 4. Desarrollar el servidor y el cliente de programas HTTP asíncronos 5 Proporcionar un marco integrado para múltiples códecs, incluidos Google Protobuf, JBossMarshalling, serialización de Java y códecs de compresión, decodificación XML, <. /p> Los usuarios pueden utilizar directamente la codificación y decodificación de cadenas. 6. Proporcionar varias bibliotecas de clases básicas de codificación y decodificación para facilitar la codificación y decodificación de la pila de protocolos privados. 7. El mecanismo Pipeline-Handler basado en la cadena de responsabilidad puede interceptar y personalizar fácilmente eventos de red. 8. Todas las operaciones de IO son asíncronas y el usuario puede obtener resultados de forma activa a través de él. Mecanismo Future-Listeren o Notificar activamente para notificar después de que el subproceso IO complete la operación. El subproceso comercial del usuario no necesita esperar sincrónicamente 9 Basado en el mecanismo Heartbeat de inactividad del enlace. para monitoreo de eventos 10. Control y configuración del tráfico ......