netty组件----Bootstrap

Bootstrap
网络编程里, “服务器” 和“客户端” 实际上表示了不同的网络行为; 换句话说, 是监
听传入的连接还是建立到一个或者多个进程的连接。
因此, 有两种类型的引导: 一种用于客户端(简单地称为 Bootstrap) , 而另一种
(ServerBootstrap) 用于服务器。 无论你的应用程序使用哪种协议或者处理哪种类型的数据,
唯一决定它使用哪种引导类的是它是作为一个客户端还是作为一个服务器。
比较 Bootstrap 类
netty组件----Bootstrap

ServerBootstrap 将绑定到一个端口, 因为服务器必须要监听连接, 而 Bootstrap 则是由
想要连接到远程节点的客户端应用程序所使用的。
第二个区别可能更加明显。 引导一个客户端只需要一个 EventLoopGroup, 但是一个
ServerBootstrap 则需要两个(也可以是同一个实例) 。
因为服务器需要两组不同的 Channel。 第一组将只包含一个 ServerChannel, 代表服务器
自身的已绑定到某个本地端口的正在监听的套接字。 而第二组将包含所有已创建的用来处理
传入客户端连接(对于每个服务器已经接受的连接都有一个) 的 Channel。
netty组件----Bootstrap

与 ServerChannel 相关联的 EventLoopGroup 将分配一个负责为传入连接请求创建
Channel 的 EventLoop。 一旦连接被接受, 第二个 EventLoopGroup 就会给它的 Channel 分配
一个 EventLoop。
在引导过程中添加多个 ChannelHandler
Netty 提供了一个特殊的 ChannelInboundHandlerAdapter 子类:
public abstract class ChannelInitializer<C extends Channel> ext ends
ChannelInboundHandlerAdapter
它定义了下面的方法:
protect ed abstract void initChannel(C ch) throws Exception;
这个方法提供了一种将多个 ChannelHandler 添加到一个 ChannelPipeline 中的简便方法。
你只需要简单地向 Bootstrap 或 ServerBootstrap 的实例提供你的 ChannelInitializer 实现即
可, 并且一旦 Channel 被注册到了它的 EventLoop 之后, 就会调用你的 initChannel()版本。
在该方法返回之后, ChannelInitializer 的实例将会从 ChannelPipeline 中移除它自己。