El mecanismo impulsado por eventos detrás de Netty
Netty es un marco de aplicación de red asíncrono impulsado por eventos para el desarrollo rápido de servidores y clientes de protocolos mantenibles y de alto rendimiento.
Por lo general, tenemos dos ideas para diseñar un programa con un modelo de procesamiento de eventos.
Método de sondeo
El hilo sondea continuamente para acceder a la fuente de eventos relevante para ver Si ha ocurrido un evento, se llama a la lógica de procesamiento de eventos cuando ocurre un evento.
Enfoque basado en eventos
Cuando ocurre un evento, el hilo principal coloca el evento en la cola de eventos y el otro hilo consume continuamente los eventos en la lista de eventos y llama al procesamiento. Lógica correspondiente al evento para procesar el evento. El método basado en eventos también se denomina método de notificación de mensajes, que en realidad es la idea del patrón de observador en el patrón de diseño.
Pida prestada la explicación de O'Reilly sobre el modelo basado en eventos
Incluye principalmente 4 componentes básicos:
Cola de eventos: la entrada para recibir eventos, tiendas pendientes eventos
Distribuidor (mediador de eventos): distribuye diferentes eventos a diferentes unidades de lógica de negocios
Canal de eventos (canal de eventos): entre el distribuidor y el procesador El canal de comunicación entre, impulsado por eventos tiene las siguientes ventajas:
Buena escalabilidad, arquitectura asíncrona distribuida, altamente desacoplada entre procesadores de eventos, fácil expansión de la lógica de procesamiento de eventos
Alto rendimiento, basado en el almacenamiento temporal de eventos en el cola, puede facilitar el procesamiento de eventos paralelo y asincrónico
La siguiente figura describe el proceso de procesamiento de eventos de Netty. Channel es un canal conectado y el productor de ChannelEvent, y ChannelPipeline puede entenderse como una colección de ChannelHandlers.
ChannelEvent es el portador de datos o estado. Por ejemplo, los datos transmitidos corresponden a MessageEvent y los cambios de estado corresponden a ChannelStateEvent. Cuando se opera un canal, se genera un ChannelEvent y se envía a ChannelPipeline. ChannelPipeline seleccionará un ChannelHandler para procesar. Después de procesar este ChannelHandler, se puede generar un nuevo ChannelEvent y fluir al siguiente ChannelHandler.
Citamos un ejemplo del paquete oficial Netty, un EchoServer simple, que acepta entradas del cliente y devuelve la entrada sin cambios.
EchoServerHandler es la lógica de procesamiento empresarial aquí.
Entre ellos, MessageEvent es un evento. Este evento transporta cierta información (ChannelBuffer). Por ejemplo, aquí e.getMessage () es el contenido del mensaje, y EchoServerHandler describe la forma de manejar este evento. Una vez que se activa un evento, se llamará y ejecutará el controlador correspondiente. Procesado (decodificado en un objeto de datos), se genera un nuevo MessageEvent y se pasa al siguiente paso para su procesamiento.
En Netty, todos los eventos provienen de la interfaz ChannelEvent. Estos eventos cubren varias etapas de la comunicación de la red, como escuchar puertos, establecer conexiones, leer y escribir datos, etc. El controlador del evento es ChannelHandler. De esta manera, no solo la lógica empresarial, sino también el procesamiento subyacente en el proceso de comunicación de la red se pueden completar mediante la implementación de ChannelHandler.
De hecho, el procesamiento de la conexión interna de Netty, la codificación y decodificación del protocolo, el tiempo de espera y otros mecanismos se completan a través de Handler.
Referencia: /code4craft/netty-learning/blob/master/publish/all.md