Netty服务端起动流程
2022-07-27 14:18:26 0 举报
描述了Netty服务端起动的整体流程
作者其他创作
大纲/内容
触发ChannelRegistered调用,会回调ChannelPipeline上对应Handler的channelRegistered方法
可以发现在注册的现场并没有指定Channel的监听事件
这个初始化器会在注册Channel时被回调
doBind()
channel.bind()
fireChannelRegistered
AbstractBootstrap#init
SelectionKey
selectionKey的interestOps设置为16
pipeline.fireChannelActive()
注意:触发bind的时候对Channel进行了ChannelPromise装饰
这里是从tail节点开始执行的,在服务启动场景下真实的逻辑是在head节点
回调handlerAdded()
group().register
从head节点开始执行完链条上所有的ChannelActive后执行readIfIsAutoRead()
unsafe.doBeginRead()
register0()
将ServiceChannelChannel注册到EventLoop的多路复用器
ChannelFuture
ChannelInitializer.initChannel()
否
ChannelFutureListener
pipeline.read()
又是一个从tail节点到head节点的pipeline执行,这个情况下只有head节点才有执行资格
添加ChannelInitializer
是
invokeLater()
这时候interestOps=0
isDone()
返回
safeSetSuccess()
在这里是ServiceSocketChannel
readIfIsAutoRead()
由pipeline.invokeHandlerAddedIfNeeded()触发,用于向ServiceSocketChannel添加一个很重要的ChannelHandler
到此完成了ServiceSocketChannel服务地址及端口的绑定工作
创建Channel
这里主要用于回调通知之前添加给ChannelFeature的Listener
初始化Channel及注册逻辑
initAndRegister()
doRegister()
doBind0()
在启动服务端的场景下这里进行了线程的切换
修改channel的readPending状态
设置Channel次相关属性
pipeline.bind()
以提交task的形式执行的
interestOps=16
收藏
0 条评论
下一页