Bootstrap
、EventLoop(Group)
、Channel
:
Bootstrap
是 Netty
框架的启动类和主入口类,分为客户端类Bootstrap
和服务器类 ServerBootstrap
两种。
Channel
是 Java NIO
的一个基本构造。 它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或者多个不同的I/O
操作的程序组件)的开放连接,如读操作和写操作
目前,可以把Channel
看作是传入(入站)或者传出(出站)数据的载体。因此,它可以被打开或者被关闭,连接或者断开连接。
EventLoop
暂时可以看成一个线程、EventLoopGroup
自然就可以看成线程组。
- 事件和
ChannelHandler
、ChannelPipeline
:
Netty 使用不同的事件来通知我们状态的改变或者是操作的状态。这使得我们能够基于已经发生的事件来触发适当的动作。
Netty 事件是按照它们与入站或出站数据流的相关性进行分类的。 连接已被激活或者连接失活; 可能由入站数据或者相关的状态更改而触发的事件包括: 数据读取;用户事件;错误事件。
出站事件是未来将会触发的某个动作的操作结果,这些动作包括:打开或者关闭到远程 节点的连接;将数据写到或者冲刷到套接字。
每个事件都可以被分发给ChannelHandler
类中的某个用户实现的方法,既然事件分为 入站和出站,用来处理事件的ChannelHandler
也被分为可以处理入站事件的Handler
和出站 事件的Handler
,当然有些Handler
既可以处理入站也可以处理出站。
Netty 提供了大量预定义的可以开箱即用的ChannelHandler 实现,包括用于各种协议 (如HTTP
和SSL/TLS
)的ChannelHandler
。
基于Netty
的网络应用程序中根据业务需求会使用Netty已经提供的ChannelHandler或 者自行开发ChannelHandler
,这些ChannelHandler
都放在ChannelPipeline
中统一管理,事件 就会在ChannelPipeline
中流动,并被其中一个或者多个ChannelHandler
处理。
ChannelFuture
:
Netty 中所有的I/O 操作都是异步的,我们知道“异步的意思就是不需要主动等待结果 的返回,而是通过其他手段比如,状态通知,回调函数等”,那就是说至少我们需要一种获 得异步执行结果的手段。
JDK 预置了interface java.util.concurrent.Future
,Future
提供了一种在操作完成时通知 应用程序的方式。这个对象可以看作是一个异步操作的结果的占位符;它将在未来的某个时 刻完成,并提供对其结果的访问。但是其所提供的实现,只允许手动检查对应的操作是否已 经完成,或者一直阻塞直到它完成。这是非常繁琐的,所以Netty提供了它自己的实现 ChannelFuture,用于在执行异步操作的时候使用。
一般来说,每个Netty
的出站I/O
操作都将返回一个ChannelFuture
。