看图
名词解读
概述
Netty抽象(抽离)出俩组线程池;
例如,在BossGroup下面,有很多的子线程.
每一个线程池中,会有一个NioEventLoop线程.
BossGroup
负责接收客户端的连接.
WorkerGroup
负责网络的读写
BossGroup和WorkerGroup类型都为 NioEventGroupLoop类型
NioEventGroupLoop
1. NioEventGroupLoop:事件循环组.含有多个事件循环.
2. 每个事件循环,都是NioEventLoop.
3. 表示一个不断循环的,执行处理任务的线程
每个NioEventLoop都有一个Selector对象.
用于监听绑定在其上的socket网络通讯
1. BossGroup监听端口,等待连接.生成SocketChannel,封装成为NioSocketChannel 传递给(发送给)WorkerGroup.
2. WorkerGroup 接收到NioSocketChannel,注册到Selector,监听该socket发生的事件(网络请求,通讯)
3. 而无论BossGroup还是WorkerGroup本质都是NioEventLoop. 都有各自的selector. 只是他们负责的任务不一样而已.
4. NioEventLoopGroup 可以含有多个NioEventLoop,也就是该Group是多线程的.是由多个NioEventLoop组成的
5. NioEventLoopGroup 可以指定初始化多少个NioEventLoop
6. 每个BossEventLoop执行步骤:
1. 轮训:accept:用户连接事件.处理accpet事件,与client建立连接.
2. 生成NioSocketChannel,并将其注册到某个WokerNioEventLoop
中的selector上
这里就是讲BossEventLoop生成的客户端连接,
注册到WorkerEventLoop上.发送给WorkerEventLoop.
3. 在去处理我们任务队列的任务,即:runAllTasks
7. WorkerGroup下的NioEventLoop做的事情
循环执行的步骤:
1. 轮训 read/write 的I/O事件.
2. 处理I/O和read,write事件.在发生事件的NioSocketChannel上进行
3. runAllTasks
Pipeline
管道:如图所示,Pipeline是包含了Channel的.
那么说明,我们可以通过Pipeline获取到Channel.
而Pipeline又可以包含别的东西.
比如拦截机制,处理机制等等.
8. WorkerNioEventLoop处理数据是通过Pipeline(管道)来执行的.Pipeline有很多的处理器.对我们的数据进行一系列的处理. 处理器有内置和自己开发.进行相关拦截和处理