1. Bootstrap和ServerBootstrap
这两个是引导类,都继承了AbstractBotstrap 类。引导类的作用就是将各个组件进行组装它可以组装所有需要用到的组件,比如 Channel、EventLoopGroup、ChannelHandler 等。Bootstra专门作为客户端的引导类,除了组装客户端相关组件,还提供了绑定和连接方法,用来提供与远程服务建立连接的事件。ServerBootstrap 作为服务端的引导类,除了组装服务端组件,同样提供了bind方法,但是没有提供连接方法。因为按照常理,都是客户端连接服务端,服务端只需要监听本地端口,接收和处理该端口上的连接事件等。在ServerBootstrap对象调用bind方法后,意味着该服务端已经绑定了本机上的端口,并且把端口暴露出来,也就是服务器已经启动,允许客户端进行连接。
2. Channel
Channel是一个接口,它是 Nety 网络操作抽象类,它除定文了基本的 I/O操作外,还定义了注册、绑定、连接等方法并且定义了与Netty 相关的方法,比如获取该Channel的EventLoop 等。它抽象的就是JavaNIO中提到的Channel。Channel生命周期的状态如下。
- 注册状态:当一个Channel注册到EventLoop 上,可以处理I0时,该Channel就是注册状态。ChannelInboundHandler中的channelRegistered方法将在注册时被调用。
- 未注册状态:Channel没有注册在EventLoop上,当一个Channel从它的 EventLoop上解除注册,不再处理I/0时,ChannelInboundHandler 中的channelUnregistered方法将在注册时被调用。
- 活跃状态:如果Channel是连接/绑定、就绪的,则是活跃状态,当Channel变成活跃状态时,ChannelInboundHandler中的channelActive 方法被调用。
- 非活跃状态:当不再连接到某个远端节点时,Channe1将处于非活跃状态,当Channel离开活跃状态时,ChannelInboundHandler中的channelInactive方法被调用。数据可读状态该状态表明当前的Chanmel有数据可读,当处于该状态时,channeiRead函数会被调用。
- 读数据完成状态该状态表明当前Channel中的数据读取已经完成,当处于该状态时channelReadComplete方法将被调用。