Netty 引导器 Bootstrap 学习笔记
Bootstrap 作为整个 Netty 客户端和服务端的程序入口,可以把 Netty 的核心组件像搭积木一样组装在一起。
Netty 服务端的启动过程大致分为三个步骤:
配置线程池;
Netty 是采用 Reactor 模型进行开发的,可以非常容易切换三种 Reactor 模式:单线程模式、多线程模式、主从多线程模式。
单线程模式
Reactor 单线程模型所有 I/O 操作都由一个线程完成,所以只需要启动一个 EventLoopGroup 即可。
多线程模式
在 Netty 中使用 Reactor 多线程模型与单线程模型非常相似,区别是 NioEventLoopGroup 可以不需要任何参数,它默认会启动 2 倍 CPU 核数的线程。当然也可以手动设置固定的线程数。
主从多线程模式
Boss 是主 Reactor,Worker 是从 Reactor。它们分别使用不同的 NioEventLoopGroup,主 Reactor 负责处理 Accept,然后把 Channel 注册到从 Reactor 上,从 Reactor 主要负责 Channel 生命周期内的所有 I/O 事件。
Channel 初始化;
设置 Channel 类型
NIO 模型是 Netty 中最成熟且被广泛使用的模型。因此,推荐 Netty 服务端采用 NioServerSocketChannel 作为 Channel 的类型,客户端采用 NioSocketChannel。
注册 ChannelHandler
在 Netty 中可以通过 ChannelPipeline 去注册多个 ChannelHandler,每个 ChannelHandler 各司其职,这样就可以实现最大化的代码复用。
设置 Channel 参数
ServerBootstrap 设置 Channel 属性有 option 和 childOption 两个方法,option 主要负责设置 Boss 线程组,而 childOption 对应的是 Worker 线程组。
端口绑定。
bind() 方法会真正触发启动,sync() 方法则会阻塞,直至整个启动过程完成。
ChannelFuture f = b.bind().sync();
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/2364761f719628f081c1e8c2c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论