Aprendizaje introductorio de Netty (1): ¿La relación entre Netty y las mejores prácticas del patrón Reactor?

¡Acostúmbrate a escribir juntos! Este es el día 16 de mi participación en el "Desafío de actualización de abril del nuevo plan diario de Nuggets", haga clic para ver los detalles del evento .

antecedentes
  1. Modo reactor, es decir, el modo reactor . La arquitectura general de Netty es un reflejo completo del patrón Reactor .

  2. El patrón Reactor se utiliza básicamente en la programación de redes . Netty es en realidad un excelente marco de código abierto para la programación de redes Java. Reactor es asincrónico, controlado por eventos y multiproceso. Netty está centrado en eventos, impulsado por eventos, y Netty es la práctica del patrón Reactor teórico.

  3. programación web tradicional

    El ServerSocket tradicional escrito basado en el bloqueo de io es un nuevo puerto libre asignado por un usuario y un subproceso. Hay dos tipos de números de puerto, por ejemplo, el primer número de puerto 8899 es el número de puerto al que se conecta el cliente, y el otro número de puerto es el puerto en el que el sistema operativo busca un puerto libre, este puerto son los dos reales. -transferencia de datos vía con el cliente.

  4. NIO es un modelo de programación asincrónica, donde un subproceso maneja todas las solicitudes de los clientes. Es lo mismo que el modelo de programación Node. Toda la programación asíncrona es inseparable de los Eventos. Por ejemplo, en las solicitudes Ajax, el éxito de la conexión es un evento. Cuando la conexión es exitosa, en realidad podemos ejecutar alguna lógica específica. Cuando el servidor responde con éxito, esto es un evento y luego ejecutamos la función de devolución de llamada de Ajax. Si el servidor no responde, esto es en realidad un evento y podemos ejecutar el método incorrecto. Este es el patrón de trabajo asincrónico basado en eventos .

  5. Comprender la evolución del patrón Reactor.

    a) Cada cliente de E/S tradicional necesita establecer un hilo para procesar todo el proceso en el mismo controlador, leer, decodificar, computar, codificar, enviar.

    b) Reactor de subproceso único se puede implementar usando java.nio. Un subproceso de Reactor distribuye eventos, y los eventos se clasifican y procesan. Cada clase es un subproceso independiente y no se afecta entre sí.

    c) Reactor de un solo hilo . La forma en que el grupo de subprocesos implementa Handler puede ajustar el grupo de subprocesos. Los subprocesos de trabajo realizan tareas de decodificación, cálculo y codificación.

    d) Reactores Múltiples (Buenas Prácticas para Reactores). Cada Reactor tiene Selector, Thread, Dispatch.


análisis de relaciones
  1. Netty es una práctica del patrón Reactor teórico .

inserte la descripción de la imagen aquí

  1. mainReactor es equivalente a bossGroup (EventLoopGroup) en Netty. Tiene Initation Dispatcher, Handle, Event Handler, Concrete EventHandler (manejador de eventos definido por el desarrollador) y separador de eventos independientes (select() es un método de bloqueo).

  2. SubReactor es equivalente a workerGroup (EventLoopGroup) en Netty, que tiene Initation Dispatcher, Handle, Event Handler, Concrete EventHandler (manejador de eventos definido por el desarrollador) y separador de eventos independientes (select() es un método de bloqueo).

  3. La "transferencia de estado" en mainReactor y subReactor la realiza el aceptador. En Netty, cuando se inicia el bossGroup, el workerGroup se agrega a la tubería a través del método channelRead para la asociación. El propósito es que cuando llegue la conexión, el boosGroup lo procese y envíe el estado de la conexión al workerGroup, para que los clientes posteriores puedan El proceso de transmisión de datos enviado es procesado directamente por el subReactor, es decir, el grupo de trabajadores monitorea directamente el evento OP_READ.

inserte la descripción de la imagen aquíEl proceso del código fuente es que cuando ServerbootStrap vincula el puerto, agrega el grupo de trabajadores como controlador del grupo de jefes. En la figura, p es el objeto de ChannelPipline.

  1. En la práctica, en términos generales, al bossGroup se le puede dar un subproceso; el workerGroup adopta el método de agrupación de subprocesos; la lógica empresarial también se realiza mediante el método de agrupación de subprocesos.

resumen
  1. Al comprender la evolución del patrón Reactor, comprenda sus mejores prácticas.

  2. Al mapear los conceptos componentes del modo Reactor con los conceptos en Netty, se encuentra que están en correspondencia uno a uno, por lo que Netty es en realidad la práctica del modo Reactor.

  3. Comprender los tres grupos de hilos. bossGroup, workerGroup, grupo de subprocesos que completa la ejecución de la lógica empresarial.

Supongo que te gusta

Origin juejin.im/post/7087372180433928199
Recomendado
Clasificación