《Netty》从零开始学netty源码(二十)之Unsafe.connect()

客户端连接服务端使用的是connect方法,整体过程如下:

《Netty》从零开始学netty源码(二十)之Unsafe.connect()_第1张图片

整体源码过程如下:

《Netty》从零开始学netty源码(二十)之Unsafe.connect()_第2张图片

在这个过程我们感兴趣的是doConnect方法,它是AbstractNioChannel的一个抽象方法,其客户端使用的实现类NioSocketChannel实现了这个方法,源码过程如下:

《Netty》从零开始学netty源码(二十)之Unsafe.connect()_第3张图片

接下来我们详细分析SocketUtils.connect()finishConnect()方法

SocketUtils.connect()

最终调用java底层的connect方法进行连接,如果是非阻塞的话会返回false,后续会调用finishConnect()完成整个connect操作;如果是阻塞的话会等待连接成功并返回结果true。
《Netty》从零开始学netty源码(二十)之Unsafe.connect()_第4张图片

finishConnect()

当netty的eventloop轮询检测到OP_CONNECT事件时会调用finishConnect()完成连接,源码如下:

《Netty》从零开始学netty源码(二十)之Unsafe.connect()_第5张图片

doFinishConnect方法源码如下:
《Netty》从零开始学netty源码(二十)之Unsafe.connect()_第6张图片

fulfillConnectPromise方法主要是设置promise状态值,源码如下:

《Netty》从零开始学netty源码(二十)之Unsafe.connect()_第7张图片

至此Unsafeconnect方法分析结束。

你可能感兴趣的:(Netty,netty)