Netty 核心组件
1.ServerBootstrap Bootstrap
ServerBootstrap 和 Bootstrap 是Netty服务端和客户端的启动配置类,用来配置服务端和客户端的各种参数。
2.Channel
Netty中的channel用来执行I/O操作,可以获得网络的连接状态和网络配置等参数。Channel提供一步的网络I/O操作,future模式,在i/o操作完后回调结果。
Channel异步调用模式返回一个channelFuture实例,通过注册注册监听器到channelFuture上,完成操作时,回调返回给调用方。
3.Selector
每一个NioEventLoop都有一个Selector采用i/o多路复用,不断查询注册在上面的channel,当有i/o事件发生时,就讲处理请求。接受请求到请求队列的过程是阻塞的。
4.ChannelPipLine, ChannelHandlerContext,ChannelHandler
channelhandler 用来处理,拦截i/o操作,并转发给下一个处理的ChannelHandlerContext
一般分为用于处理入站事件和处理出栈事件两类
入栈事件 就是一端从管道内读取数据等操作。
出栈事件就是 处理书句输入管道的操作
而在ChannelPipline中 实现了拦截器模式,是有一个由head开始 tail结束的ChannleHandlerContext组成的双向链表,可以访问前后的Context类似于负责链模式。
一个channel维护了一个ChannelPipline,一个双向链表。
ChannelPIPline 的addlist方法就是往双向链表的末尾加一个ChannelHandlerContex包裹的ChannelHandler,同时ChannelHandlerConext绑定了对应的pipline和Channel的信息
5.EventLoopGroup
无论是客户端还是服务端都是由EventLoopGroup组成的
每个EventLoopGroup里有若干个EventLoop 每个Loop里有一个Selector实例,Group有next()方法获取下一个EventLoop。通常服务器端有一个ServersocketChannel对应一个Selectoe和一个EventLoop线程,BoosGroup收到的连接客户端的SocketChannel交给WorkerEventLoopGroup来进行I/O操作