netty启动与接收流程图
2022-11-10 20:12:42 0 举报
本人对于netty启动与接收流程的理解
作者其他创作
大纲/内容
创建 NioSocketChannel
一条线程绑定一个端口,代表一个主 Reactor
绑定端口
创建 NioServerSocketChannel
init
创建 ServerSocketChannel
调用 select() 方法,直到有 I/O 事件发生
触发 NioServerSocketChannel Acceptor 读操作, 将自定义初始化 Handler 加入 NioSocketChannel
为连接事件
属性
将自定义 Handler 添加至处理链
异步执行 doBind() 方法,绑定端口
work 线程(从 Reactor)
遍历 NioSocketChannel 整条 Handler 处理链,触发 active 操作
遍历 pipeline
切换线程
active
添加 Acceptor 处理后续连接事件
register
main 线程
注册
首 Handler 调用方法为 SelectionKey 添加连接事件
为 NioServerSocketChannel 创建初始化 Handler,用于添加自定义 Handler、创建 Acceptor
bind
1. 启动流程
Acceptor
产生事件
等待 boss 线程创建
若已达上限,采用轮询方式;之后事件全由 work 线程负责
select
boss 线程回调 doBind() 方法,ServerSocketChannel 绑定端口
初始化
遍历 NioServerSocketChannel 整条 Handler 处理链,触发 active 操作
启动 boss 线程,创建 Selector
将 ServerSocketChannel 注册到 Selector,未关注事件,NioServerSocketChannel 作为附件
首 Handler 调用方法为 SelectionKey 添加读事件
主线程向 boss 线程提交注册任务
创建
ServerSocketChannel 调用 accept() 方法,创建 SocketChannel
nio 线程
启动 work 线程,创建 Selector
将 SocketChannel 注册到 Selector,未关注事件,NioSocketChannel 作为附件
使用数组方式遍历 SelectionKey 集合
添加读事件
boss 线程(主 Reactor)
任务转接
添加连接事件
boss 线程(主 Reactor)向 work(从 Reactor)线程提交注册任务
2. accept 流程
收藏
收藏
0 条评论
回复 删除
下一页