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方法接收新的鏈接建立新的NioSocketChannel
NioSocketChannel:
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方法java