Netty responde preguntas: la relación entre los componentes de Netty

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento .

Hay muchos componentes en Netty, y muchos componentes importantes se introdujeron en la sección anterior, como: Bytebuf、EventLoopGroup、Channely así sucesivamente. Hay una relación de asociación entre componentes, hablemos de la relación entre componentes. Primer vistazo al modelo de subprocesamiento de Netty:

imagen.png

Explicar la relación entre componentes a través del modelo de roscado.

1. EventLoop和EventLoopGroup

imagen.png

EventLoopGroup y EventLoop son una relación de uno a muchos, desde el nivel de código:

public interface EventLoop extends OrderedEventExecutor, EventLoopGroup {
    @Override
    EventLoopGroup parent();
}
复制代码

EventLoop es una subclase de EventLoopGroup. También es equivalente a EventLoopGroup.

2. Canal, ChannelPipeline, ChannelHandler, ChannelHandlerContext

A través de la investigación del código fuente, podemos saber (tomando NioServerSocketChannel como ejemplo), ChannelPipeline se creará al mismo tiempo que se crea Channel. Aquí podemos saber que Channel y ChannelPipeline tienen una correspondencia uno a uno. ChannelPipeline mantiene una lista doblemente enlazada de ChannelHandlers, y esta lista doblemente enlazada hereda ChannelHandlerContext y ChannelHandler. cuando te vas

Cuando ChannelPipeline agrega ChannelHandler, primero se empaqueta en ChannelHandlerContext y luego se agrega al contexto. El diagrama de relaciones es el siguiente:

imagen.png

La figura anterior ilustra la relación entre Channel, ChannelPipeline, ChannelHandler y ChannelHandlerContext.

Sugerencias: si ChannelHandler es un singleton, ChannelHandler y ChannelPipeline tienen una relación de uno a muchos

  • Channel y ChannelPipeline tienen una relación de uno a uno. Cuando se crea Channel, ChannelPipeline se vincula
  • Hay varios ChannelHandlers en ChannelPipeline, incluidos ChannelInboundHandler y ChannelOutboundHandler y controladores de tipo dúplex.
  • ChannelHandlerContext y ChannelHandler tienen una relación de uno a uno. Cuando ChannelHandler se registra con ChannelPipeline, se incluirá en ChannelHandlerContext.
  • La lista doblemente vinculada que se mantiene en ChannelPipeline es ChannelHandlerContext.

Soy una hormiga cargando un elefante. El artículo es útil para ti. Dale me gusta y sígueme. Si el artículo es incorrecto, deja un comentario ~ Gracias

Supongo que te gusta

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