Netty核心模块组件梳理
BootStrap和ServerBootStrap
BootStrap的意思是引导,一个Netty应用通常由一个bootStrap开始,主要用于配置整个Netty程序,串联各个组件。Netty中BootStrap是客户端程序引导类,ServerBootStrap是服务器端程序引导类。
常见方法:
Future和ChannelFuture
Netty中所有的io操作都是异步的,并不能立即知道操作是否执行成功。但是可以通过注册监听等待操作执行完回调通知。具体的实现就是Future和ChannelFuture来实现。
常见方法:
Channel
1)channel是Netty网络通信的组件,能够用于执行网络IO操作,可以获取当前网络连接的通道状态以及网络连接配置参数
2)channel提供异步的网络IO操作(建立连接/读/写/绑定端口)
3)channel调用立即返回一个ChannelFuture实例,用于注册监听器判断IO操作是否执行成功
4)支持关联IO操作与对应的处理程序
5)不同协议,不同的阻塞类型有不同的Channel类型与之对应
Selector
Netty是基于Selector对象来实现的IO多路复用,通过Selector可以实现一个线程监听多个Channel事件
当向一个Selector注册Channel后,Selector的内部就可不断的轮询注册的Channel是否有IO事件发生
ChannelHandler
ChannelHandler是一个接口,用于处理IO事件,并将其转发到ChannelPipeline中的下一个处理程序。ChannelHandler没有提供太多方法,使用时我们可以继承它的子类
Pipeline和ChannePipeline
ChannelPipeline是一个ChannelHandler的一个集合,它负责拦截inbound和outBound的事件和操作,相当于一个责任链模式
在Netty中每个Channel都有一个ChannelPipeline与之对应
一个channel包含了一个ChannelPipeline,而一个ChannelPipeline又维护了一个由ChannelHandlerContext组成的双向列表,并且每个ChannelHandlerContext中又关联了一个ChannelHandler
入站事件和出战事件会在一个双向链表中,入站事件从链表head到链表tail,出栈事件从链表tail到链表head
常用方法
ChannelHandlerContext
保存了Channel相关的上下文信息,同时关联了一个ChannelHandler对象
即ChannelHandlerContext中包含一个具体处理事件的channelHandler,也绑定了对应的pipeline以及channel信息,方便对ChannelHandler进行调用
常用方法
ChannelOption
Netty在创建了Channel实例后通常需要设置ChannelOption参数
EventLoopGroup和NioEventLoopGroup
EventLoopGroup是一组EventLoop的抽象,每个EventLoop维护了一个Selector
EventLoopGroup提供了一个next接口,可以获取其中一个EventLoop来处理任务
通常一个服务器端需要创建两个EventLoopGroup,一个负责连接请求一个负责读写请求
常用方法
Unpooled
Netty提供专门用来操作缓冲区的工具类
常用方法