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

Netty 总结与补充(十)

  • 简单介绍一下 Netty?
  • 你为什么会用到Netty?
  • 说说你对Netty的认识?
  • 为什么选用Netty来做通信框架?

Netty 是一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。

特点和优势:

  • 使用简单:封装了 NIO 的很多细节,使用更简单。
  • 功能强大:预置了多种编解码功能,支持多种主流协议。
  • 定制能力强:可以通过 ChannelHandler 对通信框架进行灵活地扩展。
  • 性能高:通过与其他业界主流的 NIO 框架对比,Netty 的综合性能最优。
  • 为什么大多数rpc框架都用netty?(聊了下Netty的特点)
  • 为什么 Netty 性能高
  • Netty怎么实现高性能的?Netty高性能主要依赖了哪些特性?
  • Netty为啥效率高(零拷贝,线程模型)
  • Netty为什么快(基于NIO+零拷贝)

传统 RPC 调用性能差的三宗罪

网络传输方式问题:传统的 RPC 框架或者基于 RMI 等方式的远程服务(过程)调用采用了同步阻塞 IO,当客户端的并发压力或者网络时延增大之后,同步阻塞 IO 会由于频繁的 wait 导致 IO 线程经常性的阻塞,由于线程无法高效的工作,IO 处理能力自然下降。

序列化方式问题:Java 序列化存在如下几个典型问题:

1) Java 序列化机制是 Java 内部的一种对象编解码技术,无法跨语言使用;例如对于异构系统之间的对接,Java 序列化后的码流需要能够通过其它语言反序列化成原始对象(副本),目前很难支持;

2) 相比于其它开源的序列化框架,Java 序列化后的码流太大,无论是网络传输还是持久化到磁盘,都会导致额外的资源占用;

3) 序列化性能差(CPU 资源占用高)。

线程模型问题:由于采用同步阻塞 IO,这会导致每个 TCP 连接都占用 1 个线程,由于线程资源是 JVM 虚拟机非常宝贵的资源,当 IO 读写阻塞导致线程无法及时释放时,会导致系统性能急剧下降,严重的甚至会导致虚拟机无法创建新的线程。

Netty 高性能之道

  • 异步非阻塞通信:用最少的资源做更多的事。

  • 零拷贝:尽量减少不必要的内存拷贝,实现了更高效率的传输。

  • 内存池:申请的内存可以重用。

  • 高效的 Reactor 线程模型

  • 无锁化的串行设计理念:避免使用锁带来的性能开销。

  • 高效的并发编程

  • 高性能的序列化框架:支持 protobuf 等高性能序列化协议。

  • 灵活的 TCP 参数配置能力

Netty 适用场景

  • 高并发,实时处理,如:游戏服务器,聊天服务器,SOA 调用框架,RPC 框架等。

  • 对网络协议(传输层与应用层)有一定的定制需求。

  • 一套代码可能需要同时支持 BIO 和 NIO。

而其他情况,Netty 并一不定适合,如:

  • 需求较简单的网络应用,则不必使用 Netty,毕竟在能满足需求的基础上,越简单越好。

  • 单次请求处理耗时较长的应用,这种情况下 NIO 没有优势,此时使用 BIO 的方式可能效果会更好。

  • 除了Netty还知道其它的网络通信框架吗?

Netty & MINA & Jetty

Netty 和 MINA 经常会放在一起比较,主要是因为两个框架有很多相似的地方,或者说它们本身就是一对兄弟 -- 都是基于 Java NIO 封装的一个网络框架。其实更深入的了解会发现,Netty 的作者Trustin Lee也是 MINA 的作者(当然已经不继续参与了),据说他是对 MINA 的代码不满意,才重新写了 Netty,所以看 Netty 的代码经常能看到 MINA 的影子,但就现在来说 Netty 的社区远比 MINA 要活跃,迭代频率也更高,大部分的特性也优于 MINA。

至于 Jetty 之所以会拿来比较,主要是因为和 Netty 名字类似,但其实这两者并没有很大的可比性,因为 Jetty 是一个轻量级的 servlet 容器,而 Netty 是一个基于 NIO 的异步网络编程框架,基于 Netty 可以实现自己的 servlet 容器或者其它网络应用。

  • NIO里 同步、异步调用方式的具体实现
  • Netty服务调用如何变成同步的?
  • Netty异步编程怎么做的?

netty 是异步通过事件机制来发送和接收信息的。但如果是请求-响应的模块就需要将netty修改为同步调用的方式。

具体思路是:

1、在往通道里写数据时,在通道里通过setAttachment的方式往里面添加锁(CountDownLatch)

     此时线程会被阻塞

2、在处理器(handle)里接收到返回数据后,通过通道的getAttachment获取到前面加的锁

     解锁,并将结果返回,这样外面的线程就可以拿到数据啦。

  • Netty中的select过程?(Reactor模型+ IO多路复用)

参考

netty 同步调用-CSDN博客

一文读懂网络框架Netty_文化 & 方法_蔡昱星_InfoQ精选文章

Netty系列之Netty高性能之道_后端_李林锋_InfoQ精选文章

相关文章:

Netty 总结与补充(十)

简单介绍一下 Netty?你为什么会用到Netty?说说你对Netty的认识?为什么选用Netty来做通信框架? Netty 是一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架…...

循环实现异步变同步的问题

一、背景 在开发中遇到在循环中调用异步接口的问题,导致页面渲染完成时,没有展示接口返回后拼接的数组数据。二、问题 在代码中使用了map进行循环,导致调用接口的时候处于异步。this.form.list.map(async el>{el.fileList [];if(el.pic…...

测试GPT4o分析巴黎奥运会奖牌数据

使用GPT4o快速调用python代码,生成数据图表 测试GPT4o分析巴黎奥运会奖牌数据 测试GPT4o分析巴黎奥运会奖牌数据 1.首先我们让他给我们生成下当前奥运奖牌数 2.然后我们直接让GPT帮我们运行python代码,并生成奥运会奖牌图表 3.我们还可以让他帮我们…...

TF卡(SD NAND)参考设计和使用提示

目录 电路设计 Layout 设计说明 贴片注意事项 电路设计 1、参考电路: R1~R5 (10K-100 kΩ)是上拉电阻,当SD NAND处于高阻抗模式时,保护CMD和DAT线免受总线浮动。 即使主机使用SD NAND SD模式下的1位模式,主机也应通过上拉电…...

电源芯片负载调整率测试方法、原理以及自动化测试的优势-纳米软件

在芯片设计研发领域,负载调整率作为稳压电源芯片的关键性能指标,直接关系到芯片的稳定性和可靠性,因此其测试和优化显得尤为重要。以下是对负载调整率测试原理、方法以及使用ATECLOUD-IC芯片测试系统优势的进一步阐述: 负载调整率…...

C++威力强大的助手 --- const

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: C之旅 const是个奇妙且非比寻常的东西,博主从《Effective C》一书中认识到关于const更深层次的理解,写此博客进行巩固。 &#x…...

测试环境搭建整套大数据系统(十八:ubuntu镜像源进行更新)

镜像源更新为清华源 报错显示 解决方案 做好备份 cp /etc/apt/sources.list /etc/apt/sources.list.bak查看配置信息 sudo vim /etc/apt/sources.listsudo sed -i s/cn.archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt update...

第128天:内网安全-横向移动IPCATSC 命令Impacket 套件CS 插件全自动

环境部署 案例一: 域横向移动-IPC-命令版-at&schtasks 首先是通过外网web访问到win2008,获得了win2008的权限,这一步不做演示 因为里面的主机都不出网,所以只能利用win2008进行正向或者反向连接 信息收集 域内用户信息&…...

记录一次学习过程(msf、cs的使用、横向渗透等等)

目录 用python搭建一个简单的web服务器 代码解释 MSF msfvenom 功能 用途 查看payloads列表 msfconsole 功能 用途 msfvenom和msfconsole配合使用 来个例子 msf会话中用到的一些命令 在windows中net user用法 列出所有用户账户 显示单个用户账户信息 创建用户账…...

C#中DataTable新增列、删除列、更改列名、交换列位置

C#中DataTable新增列、删除列、更改列名、交换列位置 一、新增列 1.1、新增列 /*新增列*/ dataTable.Columns.Add("列名称", Type.GetType("数据类型")); /*比如添加【name】列,string类型的内容*/ dataTable.Columns.Add("name&…...

C#编写多导联扫描式的波形图Demo

本代码调用ZedGraph绘图框架,自己先安装好ZedGraph环境,然后拖一个zedGraphControl控件就行了,直接黏贴下面代码 基本代码显示 using System; using System.Windows.Forms; using ZedGraph; using System.Timers;namespace ECGPlot {public…...

QT网络编程

Qt 给用户提供了网络编程的接口,包括TCP、UDP、HTTP三种协议的API以及各种类,可以了解一下。 而在 QT 中想要使用网络编程,必须在pro文件中添加 network 模块,否则无法包含网络编程所需的头文件。 UDP UDP是传输层的协议&#…...

Django ASGI服务

1. ASGI简介 在Django中, ASGI(Asynchronous Server Gateway Interface)的引入使得Django应用能够支持异步编程. 从Django 3.0开始, Django就增加了对ASGI的支持, 但直到Django 3.1才正式推荐在生产环境中使用ASGI. ASGI是一个用于Python的异步Web服务器的标准接口, 它允许你运…...

Servlet(2)

1、WebServlet 这个注解可以用来修饰一个Servlet类,可以简化配置,替代Web.xml中 的servlet配置 ①value属性 表示指定某个url-pattern ②urlPatterns属性 表示接受多个不同的url-pattern,多个值写在一对{}中,逗号分隔 补充;url-pattern…...

电竞玩家的云端盛宴!四大云电脑平台:ToDesk、顺网云、青椒云、极云普惠云实测大比拼

本文目录 一、云电脑概念及市场需求二、云电竞性能测试2.1 ToDesk云电脑2.2 顺网云2.3 青椒云2.4 极云普惠云电脑 三、四大云电脑平台综合配置对比3.1 CPU处理器3.2 GPU显卡3.3 内存 四、总结 一、云电脑概念及市场需求 在数字化时代的推动下,云计算技术日益成熟&a…...

基础复习(反射、注解、动态代理)

反射 反射,指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(成员变量、方法、构造器等)。 1.获取类的字节码 (3种方式) public class Test1Class{public static void main(String[] arg…...

OGG同步目标端中文乱码处理

现象说明: 源端字符集:AMERICAN_AMERICA.ZHS16GBK 目标端字符集:AMERICAN_AMERICA.AL32UTF8 源端同步过来的数据显示中文乱码。 查询数据库表中含有乱码的字段: select * from xx.xxxx a where to_char(a.crtopetime,yyyy-mm-…...

使用WPF调用Python进行图像灰度处理

1. 前言 在本文中,我们将通过WPF应用程序调用Python脚本进行图像灰度处理。我们将使用Python的OpenCV库来处理图像,并将其转换为灰度图像,然后通过WPF界面来启动Python进程并展示结果。 2. 准备工作 在开始之前,请确保系统已经…...

(二)测试工具

16. 如何进行浏览器兼容性测试? 正确回答通过率:38.0%[ 详情 ] 推荐指数: ★★★★★ 试题难度: 高难 1、兼容性测试含义 兼容性测试是指要测试的软件在不同的硬件平台上、不同的应用软件之间、不同的操作系统中、不同的网络环境中是否可以正常的运行、有无异常的测试过程…...

springboot 博客交流平台-计算机毕业设计源码56406

摘要 博客交流平台 作为一种重要的网络平台,为用户提供了展示自我、分享经验和与他人互动的空间。在国内外,研究者们关注博客交流平台 的各个方面,并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、…...

蓝牙抓包不求人:从HCI日志里‘挖’出Link Key的两种实用方法(附安卓路径)

蓝牙安全逆向实战:从HCI日志中提取Link Key的深度解析在蓝牙协议安全研究领域,Link Key作为设备配对认证的核心凭证,其获取方式一直是逆向工程师关注的焦点。许多安全审计场景下,我们往往只能获得加密后的HCI通信日志,…...

Yokogawa AAI835-H50/K4A00模拟输入/输出模块

Yokogawa AAI835-H50/K4A00 模拟输入/输出模块产品特点:通道配置:共8个通道,含4路模拟输入和4路模拟输出。信号类型:所有通道均支持4-20mA标准电流信号。HART通信:支持HART协议,可与智能现场设备双向数字通…...

基于LM22678的树莓派硬盘专用电源设计:解决供电不稳与电流冲击

1. 项目概述:为什么我们需要一个“专用”电源?如果你正在用树莓派搭配一块机械硬盘搭建一个家庭服务器或者个人云存储,可能已经遇到了一个不大不小的麻烦:供电不稳。树莓派官方推荐的5V/3A电源,单独带树莓派4B跑满负载…...

2026 新视角:化妆品开发的底层逻辑,做好一款产品,从选对原料开始

在化妆品研发链条中,配方架构、生产工艺、包装设计固然重要,但决定一款产品上限的,永远是原料。一款稳定、安全、表现优异的护肤成品,离不开纯净、达标、批次一致的优质原料。对于品牌方、配方师、代工企业而言,原料不…...

新能源车轻量化为什么开始盯上高强镁合金?

续航,是悬在每一台纯电动汽车头上的达摩克利斯之剑。多充一度电、多堆一些正极材料,是一条路;但还有另一条路——把车造得更轻。 SAE(美国汽车工程师学会)的测算已经被反复引用:整车每减重100千克&#xff…...

FM3773 低功耗离线式恒流/恒压 PSR 控制器

概述 FM3773 是一种高性能的交流/直流用于电池充电器和适配器的电源控制器,内置 850V 功率三极管。该设备采用脉冲频率调制(PFM)的方法来建立非连续导通模式(DCM)反激式电源。 FM3773 提供精确的恒定电压,恒…...

2027考研全套资料免费分享

备战27考研最全备考资料整理完毕,一路走来深知备考搜集资料耗费大量时间,浪费不少精力。特意整理2027考研全科完整版资源,全部打包汇总,零基础考生直接拿来就能使用,省去四处搜集资料的烦恼。资料内含:&…...

如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南

如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南 【免费下载链接】moveit2 :robot: MoveIt for ROS 2 项目地址: https://gitcode.com/gh_mirrors/mo/moveit2 想要为你的机器人实现智能运动规划吗?MoveIt2作为ROS 2生态中最强大…...

AutoWall终极指南:如何在Windows上轻松设置炫酷动态壁纸

AutoWall终极指南:如何在Windows上轻松设置炫酷动态壁纸 【免费下载链接】AutoWall 🌌 Live wallpapers on Windows 7/8/10/11 using open-source wallpaper engine 项目地址: https://gitcode.com/gh_mirrors/au/AutoWall 厌倦了千篇一律的静态桌…...

猫抓浏览器扩展终极指南:5分钟掌握全网视频资源下载技巧

猫抓浏览器扩展终极指南:5分钟掌握全网视频资源下载技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到心仪的视频无法…...