Netty笔记(二)主要类的概念

    netty 是一个一基于NIO跟事件模型驱动和Pipes And Filter的框架。运行时的几个主要的类:

    # Bootstarp 、ServerBootstarp

    # EventLoop

    # EventLoopGroup

    # ChannelPipeline

    # Channel

    # Futrue、ChannelFuture

    # ChannelInitializer

    # ChannelHandler

    在netty运行时,他们结合在一起,加上自己扩展的相关部件,构成了我们的应用。


# Bootstarp 、ServerBootstarp

    我们的应用起动,需要"引导程序",bootstarp进行配置我们需要的组件。

    使用Bootrstarp,指定host,跟port 建立客户端连接。

    使用ServerBootstrap , 绑定端口,建立服务。

    Bootstarp.connect() 跟ServerBootstarp.bind() 成功后,便建立了Channel, 他的生命周期由ChanelFture引用。

    Bootrstarp跟ServerBootstarp都使用了EventLoopGroup, 但两者数量不同。

    Bootrstarp只使用一个EventLoopGroup,而ServerBootstarp使用了两个,区别在于:

    ServerBootstarp使用两个EvenLoopGroup,一个用于accpect连接, 一个用于执行接收跟发送信息的处理;而Bootstarp只使用了一个EventLoopGroup,同时处理连接跟信息接收发送。

    ServerBootstart的EvenloopGroup运行:

Netty笔记(二)主要类的概念_第1张图片



# EventLoop、EventLoopGroup

   EventLoopGroup可以包含多个EventLoop,其是一个组合关系,每个EventLoopGroup,或EventLoop同时也是一个条执行线程。

关系:

Netty笔记(二)主要类的概念_第2张图片

运行过程:

Netty笔记(二)主要类的概念_第3张图片

    Bootstarp跟ServerBootstarp建立Channel后,EventLoopGroup贯穿的在整个Channel中,ServerBootstarp对于不同的客户端连接,会创建多个Channel , 多个Channel经常使用者同一个EventLoopGroup,应避免进行阻塞EventLoopGroup的操作。

#Channel、ChannelPipeline:

    Channel 实际包含了一种协议的通道,由Bootstarp配置,如NioSocketChannel;并且将通道读取IO,跟写IO等操作,包装成了EventLoop,嵌入到EventLoopGroup。Channel在事件触发时经过管道ChannelPipeline,组装多个Handler运行按顺序执行,并委托处理相关事件。

#ChannelHandler

Netty笔记(二)主要类的概念_第4张图片

在管道中执行:

Netty笔记(二)主要类的概念_第5张图片

在管道中执行

InboundHandler ->  Head到Tail

outboundHandler -> Tail 到 Head

几个Adapter

   - ChannelHandlerAdapter
   - ChannelInboundHandlerAdapter
   - ChannelOutboundHandlerAdapter
   - ChannelDuplexHandlerAdapter


#Futrue、ChannelFuture :

    ChannelFuture 扩展了 java.util.current.Futrue。并包装了一个Channel,Future模式下监控的该Channel的生命周期,同时可注册多个监听器,进行对应的操作。对于ServerBootstarp,进行bind()操作后返回的一个Server端的Channel。前面提到ServerBootstarp对于客户端连接创建的是对应客户端的Channel。

#ChannelInitializer

本身是一个ChannelHandler接口,Channel创建后,将Handler加入ChanelPipleline中执行。

你可能感兴趣的:(Netty笔记(二)主要类的概念)