Channel是Netty最核心的接口,一个Channel就是一个Socket的通道,通过Channel可以对Socket进行各种操作。
ChannelHandler: ChannelHandler用来间接控制Channel,通过继承ChannelHandler可以实现自己的Handler处理Channel事件,一个ChannelHandler可以被加到多个ChannelPipeline中,程序中我们一般直接继承ChannelInboundHandlerAdapter。ChannelHandlerContext: ChannelHandlerContext代表ChannelHandler和ChannelPipeline之间的关联,并在ChannelHandler添加到ChannelPipeline时创建一个实例。ChannelHandlerContext的主要功能是管理通过同一个ChannelPipeline 关联的ChannelHandler之间的交互。重要的是在Channel或者ChannelPipeline上调用write()都会把事件在整个管道传播,但是在ChannelHandler级别上,从一个处理程序转到下一个却要通过在 ChannelHandlerContext调用方法实现,ChannelHandlerContext会将事件传给下一个ChannelHandler。ChannelPipeline: ChannelPipeline实际上应该叫做ChannelHandlerPipeline,可以把ChannelPipeline看成是一个ChandlerHandler的链表(由ChannelHandlerContext串连起来),当需要对Channel进行某种处理的时候,Pipeline负责依次调用每一个Handler进行处理。每个Channel都有一个属于自己的Pipeline,调用Channel的pipeline()方法可以获得Channel的Pipeline,调用Pipeline#channel()方法可以获得Pipeline的Channel。NioServerSocketChannel: NioServerSocketChannel封装了一个ServerSocketChannel,ServerSocketChannel继承了AbstractSelectableChannel实现了SelectableChannel接口从而可以注册到Selector中去,ServerSocketChannle accept返回一个SocketChannel。 NioServerSocketChannel继承的是io.netty.channel.socket.ServerSocketChannel NioServerSocketChannel封装的是java.nio.channels.ServerSocketChannel 方法: 1. newSocket( ) newSocket方法调用java.nio.channels.ServerSocketChannel new Socket方法,使用默认SelectorProvider openServerSocketChannel创建一个ServerSocketChannel 2. doMessages(list) doMessages方法接收新的连接创建新的NioSocketChannelNioSocketChannel: NioSocketChannel封装了一个SocketChannel提供了更多方法,SocketChannel继承AbstractSelectableChannel实现了SelectableChannel接口从而可以注册到Selector中去,NioSocketChannel大部分方法都是调用java.nio.channels.SocketChannel的方法。 NioSocketChannel继承的是io.netty.channel.socket.SocketChannel NioSocketChannel封装的是java.nio.channels.SocketChannel 方法: 1. doConnect() doConnect方法直接调用java.nio.channels.SocketChannel的bind方法 2. doWrite(buffer) doWrite方法直接调用java.nio.channels.SocketChannel的write方法