Netty源码-业务流程之构建连接

devtools/2024/9/22 11:05:41/

Netty基本介绍,参考 Netty与网络编程

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://www.ppmy.cn/devtools/115433.html

相关文章

力扣最热一百题——搜索二维矩阵

目录 题目链接&#xff1a;240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法一&#xff1a;暴力不解释 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运行时间 时间复杂度以及空间复杂度 解法二&#xff1a;利用自带的大小关系进行Z型走…

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度&#xff1a;2000-2023年数据范围&#xff1a;286个地级市包含指标&#xff1a; year city treat post DID&#xff08;treat*post&#xff09; 样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff1a; 参考文献-pdf格式&#xff1a;https://…

LangChain教程 - 向量存储与检索器

系列文章索引 LangChain教程 - 系列文章 介绍 在这个教程中&#xff0c;你将了解 LangChain 的向量存储和检索器抽象。这些抽象旨在支持从&#xff08;向量&#xff09;数据库和其他来源检索数据&#xff0c;并将其集成到大语言模型&#xff08;LLM&#xff09;的工作流程中。…

AWS账号可以共用吗?

小伙伴们&#xff0c;大家好&#xff01;今天九河云来聊聊另一个大家可能关心的问题&#xff1a;AWS账号可以共用吗&#xff1f;很多团队或公司在使用AWS服务时&#xff0c;可能会考虑共用一个账号以节省成本或者简化管理。那么&#xff0c;这样做是否可行呢&#xff1f;让我们…

WebGL缓冲区

一、缓冲区对象 缓冲区对象时WebGL系统中的一块内存区域&#xff0c;可以一次性地向缓冲区对象中填充大量的顶点数据&#xff0c;然后将这些数据保存其中&#xff0c;供顶点着色器使用。 类型化数组 这样程序可以预知数组中的类型&#xff0c;提高性能 类型描述Int8Array8位…

弃置区原因

线性卷积&#xff0c;不用担心滤波器周期化的情况。圆周卷积在一周期内&#xff0c;一定有所有的点&#xff0c;所以信号进来的时候&#xff0c;剩下的信号一定在周期内&#xff0c;导致卷积结果不正确。 补零的圆周卷积就是为了&#xff0c;信号进来的时候&#xff0c;让其他的…

数据结构--树和二叉树

目录 一.树概念及结构(了解) 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它 叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特…

【JAVA开源】基于Vue和SpringBoot的在线文档管理系统

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…