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、Channel
y 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:
Explicar la relación entre componentes a través del modelo de roscado.
1. EventLoop和EventLoopGroup
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:
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