Netty源码-ServerBootStrap服务端启动流程

Netty服务端启动流程解析
本文详细介绍了Netty服务端启动过程中的关键步骤,包括NioServerSocketChannelFactory的设置、ChannelPipeLineFactory的配置及bind方法的调用等。深入探讨了Binder处理器的作用及其如何触发Channel.BOUND事件。

001654_9Nrb_2852872.png

Netty ServerBootStrap服务端启动流程

注意阅读顺序,正常是从左到右,然后从上到下,注解说明了一些比较重要的东西

1.设置NioServerSocketChannelFactory,

1.1 初始化 bossExecutor

1.2 初始化 workerExecutor(服务端启动过程中,并没有用到)

1.3 初始化 ChannelSink ( NioServerSocketChannelSink)

2.设置ChannelPipeLineFactory

2.1 通过多个ChnnelHander组装ChannelPipeline

2.2 通过ChannelPipeline 初始化ChannelPipelineFactory 

3. bind一个ip地址,调用ServerBootStrap.bind方法,返回NioServerSocketChannel

通过了一个阻塞队列与ChannelFuture,实现异步的控制是否启动成功

3.1 创建一个带有Binder处理器的channelPipeline,

3.2 通过1中初始化的channelFactory           创建一个NioServerSocketChannel

返回的NioServerSocketChannel as channel组合了java.nio.channels.ServerSocketChannel as NativeChannel,在new channel的时候,看到了熟悉的原生初始化NativeChannel的代码

3.2.1 执行了 Channels.fireChannelOpen()方法,触发ChannelState.OPEN事件,执行Channel的pipeline链的upstreamHandler,这个时候只有一个即Binder

3.2.2 Binder重写了channelOpen方法,并在这个方法里面调用了Channel的bind方法,这个方法会触发1.3中配置的ChannelSink中的eventSunk方法,并最终调用NioServerSocketChannel.socket.socket().bind(ip)这个实际的函数,并通过DeakLockProofWorker启动一个Boss线程,最后触发Channel.BOUND事件。

在Boss线程中,我又看到了熟悉的原生的NIO的东东,初始化Selector,注册serverChannel感兴趣的Accept事件,并启动for(;;)循环,接受SocketChannel,但是处理方式与便利SelectKeys貌似不太一样,继续看

转载于:https://my.oschina.net/baoyuexing/blog/756588

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值