Netty启动流程源码分析

92 阅读1分钟

资料

黑马程序员Netty全套教程, netty深入浅出Java网络编程重点教程_哔哩哔哩_bilibili P139-144

使用NIO启动服务器代码

使用Netty启动服务器代码

Debug流程

到doBind(final SocketAddress localAddress)方法

进入initAndRegister()方法

进入channelFactory.newChannel()方法:使用了反射的方法调用构造函数

调用了NioServerSocketChannel的构造函数

查看DEFAULT_SELECTOR_PROVIDER(第三步)

随后进入newSocket方法

完成第三步创建ServerSocketChannel:ServerSocketChannel ssc = ServerSocketChannel.open();

进入NioServerSocketChannel(ServerSocketChannel channel) 方法(第四步)

完成第四步:设置非阻塞模式

退回initAndRegister()方法进入init方法

在init方法中,初始化handler等待nio线程执行

退回initAndRegister()方法

进入register方法

进入register(EventLoop eventLoop, final ChannelPromise promise)方法

Nio线程执行register0(ChannelPromise promise)

进入doRegister()方法(第五步)

ssc注册到Selector中,附件是NioServerSocketChannel

退回register0(ChannelPromise promise)进入invokeHandlerAddedIfNeeded()

进入到之前主线程添加一个初始化的handler,现在nio执行

退回register0(ChannelPromise promise)进入safeSetSuccess(promise):设置promise状态

进入到之前主线程执行完initAndRegister()方法后,添加的promise回调方法,进入doBind0(...)方法

进入到bind(final SocketAddress localAddress, final ChannelPromise promise)方法

进入doBind(SocketAddress localAddress)方法(第六步)

退回到bind(final SocketAddress localAddress, final ChannelPromise promise)方法,进入pipeline.fireChannelActive();

一直到doBeginRead()方法(第七步)