zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

熬夜手绘netty线程模型图 如果还不懂的话,那我...

2023-02-18 16:38:04 时间

Netty组件

ServerBootstrap/Bootstrap

不知道大家还熟悉这个么,我们在学习jvm类加载的时候,讲过一个引导类加载器,我们也清楚了引导类加载器是用来干啥的,所以同样,netty的这两个组件也有同样的地位和身份,它们分别是服务端启动配置引导类和客户端启动配置引导类。通过这个引导类 串联netty所有的组件

Channel

Netty 网络通信的组件,能够用于执行网络 I/O 操作。Channel 为用户提供:

1)当前网络连接的通道的状态(例如是否打开?是否已连接?)

2)网络连接的配置参数 (例如接收缓冲区大小)

3)提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保 证在调用结束时所请求的 I/O 操作已完成。

4)调用立即返回一个 ChannelFuture 实例,通过注册监听器到 ChannelFuture 上,可以 I/O 操作成功、失败或 消时回调通知调用方。我们现在已经见到的有SocketChannel 和ServerSocketChannel,后面还会见到更多。

Selector

netty 是基于selector对象 实现多路复用。关于多路复用实现方式,我们在第一节课也给大家介绍了,这里就不展开讲了。netty通过selector 单个线程就可以实现对多个客户端channel事件的监听。

NioEventLoop

NioEventLoop内部维护了一个线程和一个任务队列,支持异步提交任务。线程启动后会调用loop的run方法,执行异步队列中的非I/O任务和I/O任务。

IO任务

accecpt、connect、read、write

非I/O任务

注册、绑定等

NioEventLoopGroup

内部维护多个NioEventLoop,负责处理多个channel事件,但是一个channel只会交给一个NioEventLoop处理

ChannelHandler

ChannelHandler 处在pipline中,它有两种类型:进站和出站,当服务端收到消息时,所有的进站hanlder将会被执行,当服务端往客户端写消息时,所有的出站handler将会被执行。

ChannelPipline

这就是上面说的pipline,一个pipline中会维护很多handler,保存一个handler list,这里涉及到一个设计模式:职责链设计模式。

手绘模型图