Netty基本介绍,参考 https://juejin.cn/post/7408844429370834954
1、Netty构建连接
构建连接的流程
1.1 我们知道客户端连接服务端都是通过NioEventLoop来处理请求,NioEventLoop是一个线程,连接进来首先进入run()方法。
所以我们需要启动服务端,然后再启动客户端发起连接,我们在run()方法打个断点看一下。
从run()方法进入processSelectedKeys方法,如下图:
processSelectedKeys有一个优化,在selectedKeys为空的时候,调用Optimized方法,这个方法做了优化,性能更好,我们进入Optimized方法
1.2 processSelectedKeysOptimized
首先看key关联的是否是AbstractNioChannel,进入processSelectedKey
1.3 NioEventLoop#processSelectedKey
readyOps是什么?
是key当前需要处理的事件(READ、WRITE、CONNECT、ACCEPT)
1.4 当readyOps=16(10000)的时候,处理READ和ACCEPT事件
如下图,此时的unsafe是AbstractNioMessageChannel$NioMessageUnsafe类,进入其read方法
1.5 进入AbstractNioMessageChannel.NioMessageUnsafe#read
(AbstractNioMessageChannel <---继承自--- NioServerSocketChannel),继续进入doReadMessages方法
1.6 doReadMssages,这里面创建链接,继续进入accept
1.7 accept创建连接并返回SocketChannel,这里调用了JDK的方法
这里建立连接,并返回SocketChannel
总结
从前面的源码分析文章我们知道NioEventLoop是处理请求的线程,通过Selector获取事件,当它收到READ、ACCEPT事件的时候会去构建连接,通过JDK构建连接。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。