Netty源码分析

356 阅读1分钟

学习链接

www.gogodjzhu.com/tag/netty/

执行流程

构建连接

io.netty.channel.nio.NioEventLoopGroup#NioEventLoopGroup() io.netty.channel.MultithreadEventLoopGroup#MultithreadEventLoopGroup() io.netty.util.concurrent.MultithreadEventExecutorGroup#MultithreadEventExecutorGroup() io.netty.channel.nio.NioEventLoopGroup#newChild() io.netty.channel.SingleThreadEventLoop#SingleThreadEventLoop() io.netty.util.concurrent.SingleThreadEventExecutor#SingleThreadEventExecutor() io.netty.util.concurrent.AbstractScheduledEventExecutor#AbstractScheduledEventExecutor() io.netty.util.concurrent.AbstractEventExecutor#AbstractEventExecutor() io.netty.channel.nio.NioEventLoop#openSelector() io.netty.util.concurrent.DefaultEventExecutorChooserFactory#newChooser()

io.netty.bootstrap.AbstractBootstrap#channel() io.netty.channel.ReflectiveChannelFactory#ReflectiveChannelFactory() io.netty.bootstrap.AbstractBootstrap#channelFactory()

bossEventLoopGroup:
io.netty.bootstrap.AbstractBootstrap#bind() io.netty.bootstrap.AbstractBootstrap#doBind() io.netty.bootstrap.AbstractBootstrap#initAndRegister() io.netty.channel.ReflectiveChannelFactory#newChannel() io.netty.channel.socket.nio.NioSocketChannel#NioSocketChannel() io.netty.channel.socket.nio.NioSocketChannel#newSocket() io.netty.channel.nio.AbstractNioByteChannel#AbstractNioByteChannel() io.netty.channel.nio.AbstractNioChannel#AbstractNioChannel() io.netty.channel.AbstractChannel#AbstractChannel() io.netty.channel.socket.nio.NioSocketChannel#newUnsafe() io.netty.channel.AbstractChannel#newChannelPipeline() io.netty.bootstrap.ServerBootstrap#init() io/netty/bootstrap/ServerBootstrap.java:207() io.netty.bootstrap.AbstractBootstrap#config() io.netty.bootstrap.AbstractBootstrapConfig#group() io.netty.channel.MultithreadEventLoopGroup#register() io.netty.util.concurrent.MultithreadEventExecutorGroup#next() io.netty.util.concurrent.DefaultEventExecutorChooserFactory.PowerOfTwoEventExecutorChooser#next() io.netty.channel.SingleThreadEventLoop#register() io.netty.channel.AbstractChannel#unsafe() io.netty.channel.AbstractChannel.AbstractUnsafe#register() io.netty.channel.AbstractChannel.AbstractUnsafe#register0() io.netty.channel.nio.AbstractNioChannel#doRegister() io.netty.channel.nio.AbstractNioChannel#javaChannel() io.netty.channel.DefaultChannelPipeline#fireChannelRegistered() io.netty.channel.AbstractChannelHandlerContext#invokeChannelRegistered(io.netty.channel.AbstractChannelHandlerContext) io.netty.channel.AbstractChannelHandlerContext#executor() io.netty.channel.AbstractChannelHandlerContext#channel() io.netty.channel.AbstractChannel#eventLoop() io.netty.channel.AbstractChannelHandlerContext#invokeChannelRegistered() io.netty.channel.DefaultChannelPipeline.HeadContext#invokeChannelRegistered() io.netty.channel.AbstractChannelHandlerContext#fireChannelRegistered) io.netty.channel.AbstractChannelHandlerContext#findContextInbound() io.netty.channel.AbstractChannelHandlerContext#invokeChannelRegistered(io.netty.channel.AbstractChannelHandlerContext)

io.netty.channel.DefaultChannelPipeline#fireChannelActive() io.netty.channel.AbstractChannelHandlerContext#executor() io.netty.channel.AbstractChannelHandlerContext#invokeChannelActive() io.netty.channel.DefaultChannelPipeline.HeadContext#channelActive()

workerEventLoopGroup:
io/netty/bootstrap/ServerBootstrap.java:203 io.netty.channel.AbstractChannel#eventLoop() io.netty.util.concurrent.SingleThreadEventExecutor#execute() io.netty.util.concurrent.SingleThreadEventExecutor#addTask() io.netty.util.concurrent.SingleThreadEventExecutor#startThread() io.netty.util.concurrent.SingleThreadEventExecutor#doStartThread() io.netty.channel.nio.NioEventLoop#run()

数据接收

Java NIO 接收连接完成:
io.netty.channel.nio.NioEventLoop#run() io.netty.channel.nio.NioEventLoop#processSelectedKeys() io.netty.channel.nio.NioEventLoop#processSelectedKeysOptimized() io.netty.channel.nio.NioEventLoop#processSelectedKey() java.nio.channels.SelectionKey#readyOps() io.netty.channel.nio.AbstractNioChannel.AbstractNioUnsafe#finishConnect() io.netty.channel.socket.nio.NioSocketChannel#doFinishConnect() sun.nio.ch.SocketChannelImpl#finishConnect() io.netty.channel.nio.AbstractNioChannel.AbstractNioUnsafe#fulfillConnectPromise() io.netty.channel.DefaultChannelPipeline#fireChannelActive() io.netty.channel.AbstractChannelHandlerContext#invokeChannelActive() io.netty.channel.DefaultChannelPipeline.HeadContext#channelActive()

服务端读数据:
io.netty.channel.nio.AbstractNioByteChannel.NioByteUnsafe#read() io.netty.channel.DefaultChannelPipeline#fireChannelRead()