Netty源码-13-connect流程
有过之前对服务端bind流程的分析之后,客户端的connect流程就显得简单了。
一 入口
java
1 |
|
java
1 |
|
java
1 |
|
核心方法有2个:
- initAndRegister(...)方法在服务端bind流程中已经分析过。
- doResolveAndConnect0(…)方法。
initAndRegister跟NioServerSocket中的bind(…)流程一样。
- 都是将Channel注册复用器前置化,有IO线程异步完成。
- Netty Channel的创建,底层映射OS的Socket。
- Channel中pipeline初始化。
- Netty Channel中持有Jdk的Channel 将Jdk的Channel注册到IO多路复用器上,关注的事件集合为0(不关注事件,因为此时Channel还没打开)。
- 注册复用器后执行一些回调,完善pipeline中handler链。
我们只要关注doResolveAndConnect0(…)这个方法就行。
二 doResolveAndConnect0(…)方法
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
三 HeadContext中实现connect
java
1 |
|
java
1 |
|
四 连接成功后active事件发布
1 立即连接成功
java
1 |
|
2 超时内连接成功
java
1 |
|
不管连接成功时机,都将触发fulfillConnectPromise(…)执行,通过它向pipeline发布active事件:
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
五 流程图
Netty源码-13-connect流程
https://bannirui.github.io/2023/03/06/Netty源码-13-connect流程/