1、Bootstrap,ServerBootstrapBootstrap是bootstrap的意思。Netty应用程序通道以Bootstrap开始。它的主要功能是配置整个Netty程序,串联各个组件。Netty中的Bootstrap类是服务器端的引导类。常用方法:服务器端使用publicServerBootstrapgroup(EventLoopGroupparentGroup,EventLoopGroupchildGroup),客户端使用2个EventLoopGroup公共B组(EventLoopGroupgroup),1个EventLoopGroup公共B通道(Class\channelClass)为一个Netty程序通道设置实现public\Boption(ChannelOption\option,Tvalue)在ServerChannel中添加配置public\ServerBootstrapchildOption(ChannelOption\childOption,Tvalue)在接收通道中添加配置publicServerBootstrapchildHandler(ChannelHandlerchildHandler)设置业务处理class(customHandler)publicChannelFuturebind(intinetPort)用于服务端设置绑定端口号publicChannelFutureconnect(StringinetHost,intinetPort)用于客户端连接服务端2、Future、和ChannelFutureNetty中的所有IO操作都是异步的,并不能立即知道是否被正确处理。但是你可以为Future和ChannelFuture注册一个监听器,当操作成功或失败时,都会自动触发监听器事件。常用方法:Channelchannel()返回当前正在进行IO操作的通道。ChannelFuturesync()等待异步操作完成。3、ChannelNetty网络通信组件,可用于进行网络IO操作。通过Channel可以获取当前网络的信道状态。网络连接的配置参数可以通过Channel获取。Channel提供异步网络IO操作(如建立连接、读写、绑定端口等)。任何调用都会返回一个ChannelFuture实例,注册监听ChannelFuture,当IO操作完成时通知调用者。支持将IO操作与相应的处理程序相关联。不同的协议,不同的阻塞类型,有不同的Channel类型与之对应。常用的Channel类型:NioSocketChannel,异步客户端TCPSocket连接NioServerSocketChannel,异步服务端TCPSocket连接NioDatagramChannel,异步UDP连接NioSctpChannel,异步客户端Sctp连接NioSctpServerChannel,异步Sctp服务端连接。这些通道包括UDP和TCP网络IO和文件IO。4、SelectorNetty基于Selector对象实现IO多路复用。通过Selector,一个线程可以监听多个连接的Channel事件。向Selector注册一个Channel后,Selector会在内部轮询这些Channel是否有就绪的IO事件(如可读、可写、网络连接完成等),这样程序就可以方便的使用一个线程来高效管理多个Channel。5、ChannelHandler及其实现类ChannelHandler是一个接口,用于处理IO事件或拦截IO操作,并转发给其ChannelPipeline中的下一个handler。ChannelHandler本身并没有提供很多方法,使用时可以继承其子类。ChannelHandler及其实现类。ChannelInboundHandler用于处理入站IO事件,ChannelOutboundHandler用于处理出站IO事件。在实际使用中,往往需要自定义Handler类继承ChannelInboundHandlerAdapter,然后重写相关方法实现业务逻辑。publicvoidchannelActive(ChannelHandlerContextctx)通道就绪事件publicvoidchannelInactive(ChannelHandlerContextctx)通道关闭事件publicvoidchannelRead(ChannelHandlerContextctx,Objectmsg)读取数据事件cause)抛出一个异常事件。6.Pipeline和ChannelPipelineChannelPipeline是一个重点:ChannelPipeline是负责处理入站或出站事件的Handlers的集合,相当于一条贯穿Netty的责任链。ChannelPipeline实现了一种高级形式的拦截过滤器模式,允许用户完全控制事件的处理方式以及Channel中各个ChannelHandler之间的交互方式。在Netty中,每个Channel都有一个且只有一个ChannelPipeline与之对应,它们的组成关系如下:一个Channel包含一个ChannelPipeline,一个ChannelPipeline维护一个由ChannelHandlerContext组成的双向链表,每个ChannelHandlerContext包含关联一个ChannelHanderinbound双向链表中的事件和出站事件,入站事件将从链表头部传递到最后一个入站处理程序,出站事件将从链表尾部转发到第一个出站事件handler,两类handler互不干扰。常用方法ChannelPipelineaddLast(ChannelHandler...handlers);在链表ChannelPipeline的第一个位置添加一个业务处理类(handler)addFirst(ChannelHandler...handlers);在链表的最后一个位置添加一个业务处理类(handler)。7、ChannelHandlerContext保存了所有与Channel相关的上下文信息,同时关联了一个ChannelHandler对象。ChannelHandlerContext包含了具体的事件处理程序ChannelHandler,同时也绑定了对应的pipeline和Channel,方便调用ChannelHandler。常用方法ChannelFutureclose();关闭当前通道ChannelHandlerContextflush();刷新数据ChannelFuturewriteAndFlush(Objectmsg);向ChannelPipeline写入数据,开始出站处理。8、ChannelOptionNetty一般需要在创建Channel实例后设置ChannelOption参数。ChannelOption参数如下:ChannelOption.SO_BACKLOG对应TCP/IP协议监听函数中的backlog参数,用于初始化服务器可用队列大小。服务端使用ChannelOption.SO_KEEPALIVE顺序处理客户端连接请求,保持连接活跃9.EventLoopGroup及其实现类NioEventLoopGroupEventLoopGroup是对一组EventLoop的抽象。为了更好的利用多核CPU资源,Netty一般同时拥有多个EventLoop。工作,每个EventLoop维护一个Selector实例。EventLoopGroup提供了下一个接口,可以按照一定的规则从组中获取其中一个EventLoop来处理任务。通常一个服务端口,即一个ServerSocketChannel对应一个Selector和一个EventLoop线程。BossEventLoop负责接收客户端连接,将SocketChannel交给WorkerEventLoopGroup进行IO处理。BossEventLoopGroup通常是一个单线程的EventLoop。EventLoop维护了一个注册到ServerSocketChannel的Selector实例。BossEventLoop不断轮询Selector以分离连接事件。通常是一个OP_ACCEPT事件,然后将接收到的SocketChannel交给WorkerEventLoopGroup,WorkerEventLoopGroup会通过next选择其中一个EventLoop将这个SocketChannel注册到它维护的Selector中,处理它后续的IO事件。常用方法:publicNioEventLoopGroup(intnThreads),构造函数,可以指定线程数,不指定则为2倍CPU核数publicFuture\shutdownGracefully()断开并关闭线程。10、UnpooledNetty提供了一个专门用来操作buffer(Netty数据容器)的工具类。常用方法:publicstaticByteBufcopiedBuffer(CharSequencestring,Charsetcharset)。publicclassNettyByteBufTest{publicstaticvoidmain(String[]args){//创建一个包含数组byte[10]的ByteBuf对象//Netty的ByteBuf不需要使用filp进行倒置,底层维护readInder和writerIndex//通过readerIndex,ByteBufbuffer=Unpooled.buffer(10);对于(inti=0;i<10;i++){buffer.writeByte(i);}System.out.println("capacity="+buffer.capacity());//输出for(inti=0;i
