当前位置: 首页 > news >正文

Netty基础

Netty基础

  • 一级目录
    • I/O请求基础知识
      • Netty如何实现自己的I/O模型
    • 网络框架的选型
  • Netty整体架构
    • Netty逻辑处理架构
      • 网络通信层
      • 事件调度层
      • 服务编排层
    • 组件关系梳理
    • Netty源码结构

netty是目前最流行的一款高性能java网络编程框架,广泛使用于中间件、直播、社交、游戏等领域。
是Dubbo、RocketMQ、Elasticsearch、Hbase等

netty的高性能表现在哪些方面?
netty中有哪些重要组件,他们之间的联系
netty的内存池、对象池是如何设计的
针对netty有哪些印象深刻的系统调优案例

一级目录

netty对于:数据编解码、拆包/粘包、TCP断线重连

提供了现成的解决方案
遇到问题可以在社区讨论
netty的迭代周期短修复问题快
可靠性和健壮性

在这里插入图片描述

为什么选择netty
I/O模型、线程模型和事件处理机制
易用性API接口
对数据协议、序列化的支持

I/O请求基础知识

  • I/O调用阶段:用户进程向内核发起系统调用
  • I/O执行阶段:内核等待I/O请求处理完成返回

在这里插入图片描述
Linux的五种I/O模式

  1. 同步阻塞I/O(BIO)
    在这里插入图片描述

  2. 同步非阻塞I/O(NIO)
    在这里插入图片描述

  3. I/O多路复用
    在这里插入图片描述

  4. 信号驱动I/O
    在这里插入图片描述

  5. 异步I/O

Netty如何实现自己的I/O模型

基于非阻塞I/O实现
底层依赖的是JDK NIO框架的多路复用器Selector
一个多路复用器Selector可以同时轮询多个Channel

在I/O多路复用的场景下,当有数据处于就绪状态后,需要一个事件分发器(Event Dispather)
负责将读写事件分发给对应的读写事件处理器(Event Handler)
事件分发器有两种设计模式
Reactor(采用同步I/O)和Proactor(采用异步I/O)

netty采用主从reactor多线程模型,所有的I/O事件都注册到一个I/O多路复用器上,当有I/O事件就绪后I/O多路复用器会将该I/O事件通过事件分发器,分发到对应的事件处理器中,该线程模型避免了同步问题以及多线程切换带来的资源开销,真正做到高性能低延迟
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更低的资源消耗:
面临大量的网络对象创建和销毁的问题

  • 对象池复用技术
  • 零拷贝技术

网络框架的选型

在这里插入图片描述

Netty整体架构

在这里插入图片描述
主要分为三个模块:
Core核心层
提供底层网络通信的通用抽象和实现,包括可扩展的事件模型、通用的通信API、支持零拷贝的ByteBuf等
Protocol Support 协议支持层
覆盖了主流协议的编解码实现,如HTTP、SSL、Protobuf、压缩、大文件传输、WebSocket、文本、二进制等
支持自定义应用层协议
TransportService传输服务层
传输服务层提供了网络传输能力的定义和实现方法,支持Socket、HTTP隧道、虚拟机管道等传输方式
netty的模块设计具有较高的通用性和可扩展性

Netty逻辑处理架构

在这里插入图片描述

网络通信层

职责是执行网络I/O的操作,支持多种网络协议和I/O模型的连接操作
4
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事件调度层

通过Reactor线程模型对各类事件进行聚合处理
通过Selector主循环线程集成多种事件
核心组件包括EventLoopGroup、EventLoop

在这里插入图片描述
eventLoopGroup本质是一个线程池,主要负责接收I/O请求,并分配线程执行处理请求

  1. 一个eventLoopGroup往往包含一个或多个EventLoop,EventLoop用于处理channel生命周期内的所有I/O事件,如accept、read、write等等
  2. EventLoop同一个时间会与一个线程绑定,每个EventLoop负责处理多个channel
  3. 每新建一个channel,EventLoopGroup会选择一个EventLoop与其绑定,该channel在生命周期内都可以对eventLoop进行多次绑定和解绑

在这里插入图片描述
EventLoopGroup是Netty Reactor线程模型的具体实现方式
在这里插入图片描述
事件调度层负责监听网络连接和读写操作,然后触发各种类型的网络事件,需要一种机制管理这种错综复杂的事件,并有序地执行

服务编排层

负责组装各类服务,用以实现网络事件的动态编排和有序传播
在这里插入图片描述
ChannelPipeline负责组装各种ChannelHandler
实际数据的编解码以及加工处理操作由ChannelHandler完成

当I/O读写事件触发时,ChannelPipeline会依次调用ChannelHandle列表对Channel的数据进行拦截和处理
ChannelPipeline是线程安全的,因为每一个新的Channel会对应绑定一个新的ChannelPipeline
一个ChannelPipeline关联一个EventLoop,一个EventLoop仅会绑定一个线程

在这里插入图片描述
以客户端为例:数据从客户端发往服务端,该过程称为出站,反之为入站
数据入站有一系列InboundHandler处理,再以一系列相反方向的outboundHandler处理后完成出站,我们经常使用的编码encoder是编码操作,解码decoder是入站操作

服务端接收到客户端数据后,需要先经过decoder入站处理后,再通过encoder出站通知客户端
在这里插入图片描述
在这里插入图片描述
每创建一个Channel都会绑定一个新的ChannelPipeline;
ChannelPIpeline中每加入一个ChannelHandler都会绑定一个ChannelHandleContext

每个Handler绑定Context的作用是什么?

  1. context 用于保存ChannelHandler上下文,通过它可以知道ChannelPipeline和ChannelHandler的关联关系
  2. context实现了ChannelHandler之间的交互
  3. context包含了ChannelHandler生命周期的所有事件,如connect、bind、read、flush、write、close等
    在这里插入图片描述

组件关系梳理

在这里插入图片描述

Netty源码结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

Netty基础

Netty基础 一级目录I/O请求基础知识Netty如何实现自己的I/O模型 网络框架的选型 Netty整体架构Netty逻辑处理架构网络通信层事件调度层服务编排层 组件关系梳理Netty源码结构 netty是目前最流行的一款高性能java网络编程框架,广泛使用于中间件、直播、社交、游戏等领…...

602,好友申请二:谁有最多的好友

好友申请二:谁有最多的好友 实现 with tmp as (selectrequester_id idfrom RequestAcceptedunion allselectaccepter_id idfrom RequestAccepted )selectid,count(*) num from tmp group by id order by num desc limit 1;...

【Matlab算法MATLAB实现的音频信号时频分析与可视化(附MATLAB完整代码)

MATLAB实现的音频信号时频分析与可视化 前言正文:时频分析实现原理代码实现代码运行结果图及说明结果图:结果说明:总结前言 音频信号的时频分析是信号处理领域中的一个重要研究方向。它允许我们同时观察信号在时间和频率域的特性,为音频处理、语音识别、音乐分析等应用提供…...

界面耻辱纪念堂--可视元素03

更多的迹象表明,关于在程序里使用新的动态界面元素,微软的态度是不确定的,其中一个是仅仅需要对比一下Office97 里的“Coolbars”和“标准工具条”。Coolbar 按钮直到用户指针通过的时候才成为按钮(否则是平的)。 工具…...

国产龙芯处理器选择迅为2K1000开发板有资料

硬件配置国产龙芯处理器,双核64位系统,板载2G DDR3内存,流畅运行Busybox、Buildroot、Loognix、QT5.12 系统!接口全板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、GPS接口WIF1、蓝牙、Mini HDMI…...

MySQL 命令(持续更新)

将 MySQL 命令结果输出到文件中 通过 k8s MySQL pod 里的客户端连接到 MySQL 服务器 kubectl exec mysql-pod -- mysql -hx.x.x.x -uroot -proot -e SELECT * FROM db.table; > result.txt通过 k8s MySQL pod 的客户端连接 MySQL 服务器,直接进入到 MySQL 客户端…...

Linux下Docker方式Jenkins安装和配置

一、下载&安装 Jenkins官方Docker仓库地址:https://hub.docker.com/r/jenkins/jenkins 从官网上可以看到,当前最新的稳定版本是 jenkins/jenkins:lts-jdk17。建议下在新的,后面依赖下不来 所以,我们这里,执行doc…...

低代码框架参考

企业管理信息系统作为一类重要的应用软件系统,具有自己的特点,主要有两个方面: 1. 系统规模大,目前市场上常见的ERP系统一般都有几千个页面。 2. 页面逻辑相似性强。经过比较可以发现,大部分页面具有类似的功能&…...

2024 年 9 月区块链游戏研报:行业回暖,Telegram 游戏引发热潮

作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics Games Research Page 9 月份,区块链游戏代币的市场总值增长了 29.2%,达到 232 亿美元,日活跃用户(DAU)数量上升了 1…...

python爬虫登录校验之滑块验证、图形验证码(OCR)

在爬虫过程中,验证码和滑块验证是常见的反爬措施。针对这些挑战,通常采用OCR识别图形验证码和模拟滑块拖动来处理滑块验证。以下是如何处理这两种类型验证的详细方法。 1. 图形验证码(OCR) a. 使用 tesserocr 和 Pillow 处理图形…...

(一)Python程序结构

1、Python写模块 使用缩进分层来写模块; 2、缩进规范 最好使用同一种缩进方式,统一使用tab或者空格键; 3、换行符:\n; print("窗前明月光\n疑似地上霜") 4、续行符号:\; 注意1…...

二叉树——相同的树

还是应用递归的思想,将这个问题拆分为三个部分,第一:当两棵树均为空树,或者访问到最后的子树时均为空树时,则返回true。第二:当两棵树中其中一棵树为空树,另一棵树不是空树,证明两棵…...

探秘 1688 商品详情接口:高并发批量采集的实战攻略

在进行 1688 商品详情接口批量采集并考虑高并发使用时,你可以从以下几个方面着手: 一、技术选型 选择合适的编程语言和框架:例如 Python 的 Scrapy 框架或者 Java 的 Spring Boot 结合相关爬虫库等,这些工具可以帮助你高效地实现…...

【C语言】sizeof

tmp_buf = (char *)malloc(size)不可以直接使用`sizeof`来查看动态分配内存的大小。在C语言中,`sizeof`操作符是在编译时确定类型或对象的大小,并不能用于动态获取malloc分配的内存大小。 下面解释为什么不能用`sizeof(tmp_buf)`查看动态分配的内存大小: 1. 编译时 vs 运行时…...

2024-10-15 问AI: [AI面试题] 人工智能中使用了哪些不同的搜索算法?

文心一言 人工智能中使用了多种不同的搜索算法来解决问题,这些算法各有特点,适用于不同的场景和问题类型。以下是一些常见的人工智能搜索算法: 深度优先搜索(DFS): 是一种基于树或图的搜索算法。核心思想是…...

2024 年 04 月编程语言排行榜,PHP 排名创新低?

编程语言的流行度总是变化莫测,每个月的排行榜都揭示着新的趋势。2024年4月的编程语言排行榜揭示了一个引人关注的现象:PHP的排名再次下滑,创下了历史新低。这种变化对于PHP开发者和整个技术社区来说,意味着什么呢? P…...

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况,没理过,因为不影响啥除了不美观...但今天看着实在是难受,怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法,都不得行,后面发现了这篇文章,解决了! 感谢! Element中t…...

unity学习-全局光照(GI)

在全局光照(Lighting)界面有两个选项 Realtime Light(实时光照):在项目中会提前计算好光照以及阴影的程序,当你需要调用实时全局光照的时候会将程序调用出来使用 Mixed Light(烘焙光照&#x…...

记录Centos7 漫漫配置路

记录Centos7 漫漫配置路 一、 配置源二、 clinfo三、 PCL 配置1. 依赖2. eigen3. boost4. flann5. pcl 四、YAML-CPP五、 miniconda 安装 python3.6 和 pytorch六、libbot 配置1. 容易安装的依赖2. 需要源码安装的依赖3. [libbot](https://github.com/libbot2/libbot2) 简单地说…...

论文 | OpenICL: An Open-Source Framework for In-context Learning

主要内容: 2. 提供多种 ICL 方法: 3. 完整的教程: 4. 评估和验证: 背景: 随着大型语言模型 (LLM) 的发展,上下文学习 (ICL) 作为一种新的评估范式越来越受到关注。问题: ICL 的实现复杂&#xf…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

FTPS、HTTPS、SMTPS以及WebSockets over TLS的概念及其应用场景

一、什么是FTPS? FTPS,英文全称File Transfer Protocol with support for Transport Layer Security (SSL/TLS),安全文件传输协议,是一种对常用的文件传输协议(FTP)添加传输层安全(TLS)和安全套接层(SSL)加密协议支持的扩展协议。…...

【仿生机器人】刀剑神域——爱丽丝苏醒计划,需求文档

仿生机器人"爱丽丝"系统架构设计需求文档 一、硬件基础 已完成头部和颈部硬件搭建 25个舵机驱动表情系统 颈部旋转功能 眼部摄像头(视觉输入) 麦克风阵列(听觉输入) 颈部发声装置(语音输出&#xff09…...