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构建连接。


杜若
70 声望3 粉丝