学习链接
执行流程
构建连接
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()