写点什么

Netty 引导器 Bootstrap 学习笔记

用户头像
风翱
关注
发布于: 2021 年 05 月 15 日

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();


发布于: 2021 年 05 月 15 日阅读数: 12
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
Netty引导器Bootstrap学习笔记