| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> Java知识库 -> Netty原理四:客户端Bootstrap启动连接时做了些什么? -> 正文阅读 |
|
|
[Java知识库]Netty原理四:客户端Bootstrap启动连接时做了些什么? |
前言先来看一段很普通的客户端程序,定义 NioEventLoopGroup,然后通过 Bootstrap 去连接Server。
这里跟Server程序有几个不同点:
这边我们主要讲的就是 connect() 方法的内部实现。 PS.本篇文章Netty源码,只会贴出关键性的部分,方便理解。 原理解析connect() 的核心就是 doResolveAndConnect():(不重要,pass)
doResolveAndConnect 关键的也就两个方法:initAndRegister、doResolveAndConnect0
该方法的实现在基类 AbstractBootstrap.java,因此和服务端的启动基本一样,唯一不同的在于 init() 方法。用一张图来表示吧,比较清楚:
这里的连接需要调试跟踪,最终到达 AbstractNioChannel.java的内部类 AbstractNioUnsafe,执行此处的 connect 方法,下面我贴出几句关键代码:
继续跟踪 doConnect 方法,因为连接不是马上完成的,所以这边有个判断:如果连接尚未成功,则设置 interestOps == SelectionKey.OP_CONNECT
既然设置了interestOps,那么 selector.select() 那边肯定会捕获到事件。
unsafe.finishConnect() 内部会调用 fulfillConnectPromise。 做了这么多,最最最关键的就是这里。此方法会触发 channelActive 事件,从而继续触发 AbstractNioChannel 的 doBeginRead 方法。看过 Netty原理一:ServerBootstrap启动过程全解析 这篇文章应该就记得,这里会重新设置 interestOps,设置的值就是 NioSocketChannel 构造函数设置的 SelectionKey.OP_READ 最后,连接成功之后,整个结构如下图所示
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/16 5:33:57- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |