前言
netty学习系列笔记总结,解码器抽象父类-ByteToMessageDecoder源码浅析,错误之处欢迎指正, 共同学习
netty学习系列笔记总结,Pipeline源码浅析,错误之处欢迎指正, 共同学习
在 netty核心组件-pipeline解析(一) 中我们了解了pipeline 的基本概念和初始化及节点添加与删除逻辑,知道了 Netty 是如何处理网络数据的,这篇分析 pipeline 的事件和异常的传播。
在 netty-接受请求过程源码分析 我们已经分析了新连接的建立过程。接着我们在 NioEventLoop 类的 processSelectedKey 方法中,监听 accpet 事件和 read 事件。
netty学习系列笔记总结,Pipeline源码浅析,错误之处欢迎指正, 共同学习
netty在服务端端口绑定和新连接建立的过程中会建立相应的channel,而与channel的动作密切相关的是pipeline这个概念,在使用Pipeline中自己也有如下不解。
1.ChannelHandlerContext的作用是什么,为什么每一个Handler需要包装一个ChannelHandlerContext
2.数据是如何在不同Handler中传递的
3.Handler在哪一个executor中执行呢? 可以为Handler指派不同的executor吗, 如果handler在不同的executor中执行, 那么数据又是怎么在handler中传递的呢?
4.HeadContext和TailContext的作用是什么?
5.InBound Event来OutBound Event到底是什么? 有什么不同呢? 在Handler中传递有什么区别呢?
下面我们通过源码分析回答这些问题。
netty学习系列笔记总结,接受请求过程源码浅析,错误之处欢迎指正, 共同学习
netty启动过程源码分析,我们得知,服务器最终注册了一个 Accept 事件等待客户端的连接。我们也知道,NioServerSocketChannel 将自己注册到了 boss 单例线程池(reactor 线程)上,也就是 EventLoop.
EventLoop所做的事情均分为以下三个步骤
1.轮询注册在selector上的IO事件
2.处理IO事件
3.执行异步task