Netty的组件和设计

Channel:
是Java Nio的一个基本构造,他代表一个实体的开放连接,如读操作和写操作。可以把 Channel 看作是传入(入站)或者传出(出站)数据的载体
EventLoop接口:
用于处理连接的生命周期中所发生的事件。
Netty的组件和设计
1. 一个 EventLoopGroup 包含一个或者多个 EventLoop;
2. 一个 EventLoop 在它的生命周期内只和一个Thread 绑定;
3. 所有由 EventLoop 处理的 I/O 事件都将在它专有的 Thread 上被处理; 一个 Channel在它的生命周期内只注册于一个 EventLoop;
4. 一个 EventLoop 可能会被分配给一个或多个 Channel。

ChannelFuture接口:
可以将 ChannelFuture 看作是将来要执行的操作的结果的
占位符。它究竟 什么时候 被执行则可能取决于若干的因素,因此不可能准确地预测,但是可以肯定的是它 将会 被执行。此外,所有属于同一个 Channel 的操作都被保证其将以它们被调用的顺序被执行。

ChannelPipeline接口:
ChannelPipeline 提供了 ChannelHandler 链的容器,并定义了用于在该链上传播入站
和出站事件流的 API。当 Channel 被创建时,它会被自动地分配到它专属的 ChannelPipeline。
ChannelHandler 安装到 ChannelPipeline 中的过程如下所示:
1. 一个ChannelInitializer的实现被注册到了ServerBootstrap中;
2. 当 ChannelInitializer.initChannel()方法被调用时,ChannelInitializer将在 ChannelPipeline 中安装一组自定义的 ChannelHandler;
3. ChannelInitializer 将它自己从 ChannelPipeline 中移除。

引导:
Netty 的引导类为应用程序的网络层配置提供了容器,这涉及将一个进程绑定到某个指定的端口,或者将一个进程连接到另一个运行在某个指定主机的指定端口上的进程。
引导类有两种:客户端的Bootstrap和服务器端的ServerBootstrap

类别 Bootstrap ServerBootstrap
网络编程中的作用 连接到远程主机和端口 绑定到一个本地端口
EventLoopGroup 的数目 1 2(也可以是1,此时是两个相同的)

服务器需要两个EventLoopGroup,因为服务器需要两组不同的 Channel。第一组将只包含一个 ServerChannel,代表服务器自身的已绑定到某个本地端口的正在监听的套接字。而第二组将包含所有已创建的用来处理传入客户端连接(对于每个服务器已经接受的连接都有一个)的 Channel。