Bootstrap组成
参考源码AbstractBootstrap
1. 客户端启动类Bootstrap
Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。
- 声明Bootstrap
- server端为ServerBootstrap
- client端为Bootstrap
2. 设置初始化内容
- 创建reactor 线程组
EventLoopGroup bossLoopGroup = new NioEventLoopGroup(1);
EventLoopGroup workerLoopGroup = new NioEventLoopGroup();
- 为父(接收者)和子(客户端)设置 EventLoopGroup。
b.group(bossLoopGroup, workerLoopGroup);
- 指定Channel的类型
- server端为NioServerSocketChannel
- client端为NioSocketChannel
- 设置处理数据的Handler
3. 构建ChannelFuture
- 声明ChannelFuture,实例化Channel
ChannelFuture regFuture = initAndRegister();
ChannelFuture initAndRegister() {
Channel channel = channelFactory().newChannel();
ChannelFuture regFuture = group().register(channel);
return regFuture;
}
- ChannelFuture注册监听器
- doBind地址和事件
- 返回Future
Channel
在Netty中,Channel相当于一个Socket的抽象,它为用户提供了关于Socket状态(是连接还是断开)及对Socket的读、写等操作。每当Netty建立了一个连接,都创建一个与其对应的Channel实例。
Channel的作用
Netty 网络通信的组件,能够用于执行网络 I/O 操作。Channel 为用户提供:
- 当前网络连接的通道的状态(例如是否打开?是否已连接?)
- 网络连接的配置参数 (例如接收缓冲区大小)
- 提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保证在调用结束时所请求的 I/O 操作已完成。 调用立即返回一个 ChannelFuture 实例,通过注册监听器到 ChannelFuture 上,可以 I/O 操作成功、失败或取消时回调通知调用方。
- 支持关联 I/O 操作与对应的处理程序。
Channel 类型
不同协议、不同的阻塞类型的连接都有不同的 Channel 类型与之对应。下面是一些常用的 Channel 类型:
- NioSocketChannel,异步的客户端 TCP Socket 连接。
- NioServerSocketChannel,异步的服务器端 TCP Socket 连接。
- NioDatagramChannel,异步的 UDP 连接。
- NioSctpChannel,异步的客户端 Sctp 连接。
- NioSctpServerChannel,异步的 Sctp 服务器端连接,这些通道涵盖了 UDP 和 TCP 网络 IO 以及文件 IO。