Netty principio

Netty principio

Netty ¿Qué es? Netty es un marco de desarrollo altamente eficiente JBoss Java NIO producido.

modo de reactor

Netty usar el patrón del reactor, que incluye tres modos:

  1. Reactor modelo single-roscado
  2. modelo roscado multi-Reactor
  3. modelo de rosca multi-maestro-esclavo

De hecho, el modelo de reactor se basa en Java NIO en su base, abstraído dos componentes --Reactor y Manipulador de dos componentes:

  1. Reactor: IO responsable de responder a eventos, cuando se detecta un nuevo evento, enviarlo al manejador apropiado para hacer frente a; nuevos eventos incluyen la configuración de conexión listo, listo para la lectura, la escritura, etc. listo.
  2. Handler: sí (manejador) y el suceso de unión, es responsable de controlar el evento, completando el canal de lectura, post-procesamiento de la lógica de negocio a completa, será responsable de los resultados del canal de escritura.
  3. Receptor: aceptar solicitud del cliente, sino que también puede ser visto como un Handler.

Reactor modelo single-roscado

Sólo un hilo a completa todo, incluyendo la conexión TCP cliente petición de recepción, detectar eventos, leer y escribir datos de socket.
Aquí Insertar imagen Descripción

Para algunos escenarios de pequeña capacidad, se puede utilizar el modelo de un único subproceso. Sin embargo, para alta carga, amplia aplicación concurrente era inadecuado, debido principalmente a lo siguiente:

  1. límite de rendimiento, no puede hacer frente a cientos de eventos, incluso si la carga de la CPU NIO hilo 100%, no puede cumplir con la codificación de mensajes masivos, la decodificación, la lectura y transmisión;
  2. Cuando el hilo NIO sobrecargado, el rendimiento disminuirá, lo que conducirá a una gran cantidad de tiempo de espera de conexión del cliente, tiempo de espera tras tienden a ser retransmitido, que es la carga aún más pesada NIO hilo con el tiempo dará lugar a un gran número de mensajes de retraso acumulado y mango tiempos de espera, NIO el hilo se convertirá en un sistema de cuello de botella;
  3. problemas de fiabilidad: NIO hilo una vez que uno controlador de eventos (mango) la falta de envío o la obstrucción, se encargará de todos de la otra no puede ser, y será bloqueado aceptor vivo, es decir, todo el módulo de comunicación del sistema no está disponible , no puede recibir y procesar mensaje externo, causando fallo de nodo.

Para abordar estas cuestiones, la evolución del modelo de reactor multi-threading.

Reactor modelo multi-threading:

más grande del Rector multi-hilo y un único subproceso diferencia modelo modelo es: hay un grupo de subprocesos real de las operaciones de IO, es decir, va a manejar una gran cantidad de operaciones IO realizado en el grupo de subprocesos, y aceptor, reactor o un único subproceso a aceptar a un cliente las solicitudes de conexión TCP.
Aquí Insertar imagen Descripción

Reactor multi-threading características modelo:

  1. NIO hilo tiene un hilo dedicado para la escucha del servidor TCP -Acceptor, el cliente recibe una solicitud de conexión;
  2. las operaciones de la red IO - leer (Handler), y la escritura de una piscina responsable hilo NIO que comprende N y una cola de tareas de hilos disponibles, estos hilos son responsables de lectura de mensajes NIO, la decodificación, codificación y transmisión;
  3. Un hilo puede procesarse simultáneamente NIO N enlaces, pero sólo un enlace correspondiente a un hilo NIO de los problemas concurrentes.

En la mayoría de los escenarios, Reactor de modelos para satisfacer los requisitos de rendimiento multi-threading, sin embargo, en un escenario muy especial, un hilo NIO es responsable de la supervisión y el manejo de todas las conexiones de cliente pueden existir problemas de rendimiento.

por ejemplo, millones de conexiones de cliente simultáneas, o el servidor requiere autentificación de seguridad del cliente mensaje de negociación, la certificación en sí es muy pérdida de rendimiento. En tales escenarios, un solo hilo aceptador puede haber problemas de rendimiento insuficiente con el fin de resolver los problemas de rendimiento, lo que resulta en un tercer modelo de subprocesamiento Reactor - modelo maestro multi-roscado del reactor.

modelo roscado multi-Reactor maestro-esclavo

La mayor diferencia desde el hilo principal del reactor y el modelo de reactor modelo multi-threading es: hay un reactor principal escuchar las conexiones, múltiples oyentes a leer y escribir eventos desde el reactor. En otras palabras, un reactor principales puntos de dos tipos de conexión son responsables de supervisar los eventos y eventos de escritura.

Aquí MainReactor único, pero subReactor pueden tener más.

MainReactor supervisa grupo de subprocesos del aceptador y monitores subReactor grupo de subprocesos Handler.

Aceptador de grupo de subprocesos sólo se utiliza para conexión del cliente, apretones de manos y la certificación de seguridad, una vez que se establezca el enlace, se enlazará con espalda grupo de subprocesos de registro subReactor de la rosca de E / S, hay flujo de entrada / S es responsable de E / S posteriores operación.

Aquí Insertar imagen Descripción

Es decir, a partir del modelo multi-roscado de un hilo para detectar eventos de conexión y datos de eventos leídos , se divide en un detector de eventos conexión de rosca, una pluralidad de hilos de escucha de datos grupo de subprocesos leen y conexión eventos de socket de escritura se ha establecido , y adicionalmente modelo multi-threading como una piscina de hilo dedicado operaciones reales IO.

modo de Netty

Tener tres formas modelo Reacotr, a continuación, Netty lo que es?

De hecho, hay una variante del modelo Reactor, es la tercera forma de la variante para eliminar el grupo de subprocesos, que es el modo por defecto Netty NIO.
En la realización, clase Netty actúa como el jefe mainReactor, clase NioWorker actúa subReactor (número predeterminado es NioWorker Runtime.getRuntime (). AvailableProcessors ()) . Al procesar las nuevas solicitudes, NioWorker para leer los datos son recibidos ChannelBuffer, después de lo cual el gatillo ChannelHandler ChannelPipeline corriente.

  1. EventLoopGroup es Reactor equivalente, bossGroup correspondiente reactor primario, workerGroup correspondiente al Reactor
  2. TimeServerHandler es Handler
  3. El método comienza con la configuración de niño es un canal de cliente, el método de la no-niño es el principio de la configuración del canal de servidor

NioEventLoop es hilo Reactor de Netty Netty, deberes Reactor modelo de hilos es el siguiente:

  1. Como servidor aceptador hilo responsable de gestionar el acceso a las peticiones del cliente
  2. Como cliente Connecor hilo es responsable del registro de escuchar las conexiones posición de funcionamiento para juzgar los resultados de una conexión asíncrona
  3. A medida que el proceso de IO, la escucha de la red que leen poco, responsable de la lectura de su mensaje SocketChannel
  4. A medida que el proceso de IO es responsable de mensaje SocketChannel escrita enviada a la otra parte, si había un medio de escritura de un paquete, se registrará automáticamente los detectores de eventos para escribir, seguir enviando mitad de un paquete de datos posteriores hasta que toda la transmisión de datos se completa
    , como se muestra a continuación, se trata de un proceso de NioEventLoop cadena:

Aquí Insertar imagen Descripción
nota:

  • método de procesamiento Handler en la cadena de procesamiento es una serialización de ejecución

  • Un cliente se conecta sólo para inscribirse en un NioEventLoop, evitando múltiples hilos IO operaciones simultáneas

  • Netty específica en qué modo

fuente original: https: //blog.csdn.net/qq_18603599/article/details/80768390

Publicado 67 artículos originales · ganado elogios 32 · Vistas a 60000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43751710/article/details/104807162
Recomendado
Clasificación