Netty简介及应用场景

2023-10-31

什么是Netty
 Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。
Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来开发网络应用程序,这种新的方式使它很容易使用和具有很强的扩展性。Netty的内部实现是很复杂的,但是Netty提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。

网络应用程序通常需要有较高的可扩展性,无论是Netty还是其他的基于Java Nio的框架,都会提供可扩展性的解决方案。Netty中一个关键组成部分是它的异步特性,本片文章将讨论同步(阻塞)和异步(非阻塞)的IO来说明为什么使用异步代码解决扩展性问题以及如何使用异步。

Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke's Choice Award,见https://www.java.net/dukeschoice/2011)。它活跃和成长于用户社区,像大型公司 Facebook 和 Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x, Apache Cassandra 和 Elasticsearch 等,都利用其强大的对于网络抽象的核心代码。

Netty应用场景
1.分布式开源框架中dubbo、Zookeeper,RocketMQ底层rpc通讯使用就是netty。
3.1互联网行业
1) 互联网行业: 在分布式系统中, 各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少, Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。
2) 典型的应用有: 阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信, Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信
3.2游戏行业
1) 无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用
2) Netty 作为高性能的基础通信组件, 提供了 TCP/UDP 和 HTTP 协议栈,方便定制和开发私有协议栈, 账号登录服务器
3) 地图服务器之间可以方便的通过 Netty 进行高性能的通信

这两图可以看出,NIO的单线程能处理连接的数量比BIO要高出很多,而为什么单线程能处理更多的连接呢?原因就是图二中出现的Selector。
当一个连接建立之后,他有两个步骤要做,第一步是接收完客户端发过来的全部数据,第二步是服务端处理完请求业务之后返回response给客户端。NIO和BIO的区别主要是在第一步。
在BIO中,等待客户端发数据这个过程是阻塞的,这样就造成了一个线程只能处理一个请求的情况,而机器能支持的最大线程数是有限的,这就是为什么BIO不能支持高并发的原因。
而NIO中,当一个Socket建立好之后,Thread并不会阻塞去接受这个Socket,而是将这个请求交给Selector,Selector会不断的去遍历所有的Socket,一旦有一个Socket建立完成,他会通知Thread,然后Thread处理完数据再返回给客户端——这个过程是不阻塞的,这样就能让一个Thread处理更多的请求了。

传输快
Netty的传输快其实也是依赖了NIO的一个特性——零拷贝。我们知道,Java的内存有堆内存、栈内存和字符串常量池等等,其中堆内存是占用内存空间最大的一块,也是Java对象存放的地方,一般我们的数据如果需要从IO读取到堆内存,中间需要经过Socket缓冲区,也就是说一个数据会被拷贝两次才能到达他的的终点,如果数据量大,就会造成不必要的资源浪费。
Netty针对这种情况,使用了NIO中的另一大特性——零拷贝,当他需要接收数据的时候,他会在堆内存之外开辟一块内存,数据就直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Netty简介及应用场景 的相关文章

  • Unity Shader 学习 004-Shader 调试 平台差异性 第三方调试工具

    文章目录 学习时间 学习产出 1 调试Shader 1 1 我们打开FrameDebug窗口 1 2 通过FrameDebug窗口查看我们shader渲染目标的状态 2 平台差异性 2 1 抗锯齿 2 2 DX平台定义变量更严格 3 第三方
  • 利用nodemcu和mqtt协议让嵌入式设备接入互联网(一.layui前端框架)

    文章目录 前言 HTML知识简单总结 vscode快捷操作 HTML知识总结 HMTL结构 头部 身体 样式表CSS layui介绍 源码 前言 为了让自己的嵌入设备接入互联网 而且能互相通讯 用直接的TCP或者UDP协议肯定是不够的 在了
  • 华清 c++ day2 9月7

    include
  • React 状态、事件与动态渲染

    全文共 3663 个字 列表与组件的键值 首先让我们看看在JavaScript中我们是如何处理一个列表的 const numbers 1 2 3 4 5 const doubled numbers map number gt number
  • Java8函数式编程(一):

    函数式编程是一个有且只有一个的抽象方法 然后可以有多个非抽象方法的接口 可以通过Lambda表达式来直接调用 实际上有段时间函数式编程还挺多推崇的 当然这都是要学习成本的 你最起码要知道什么是拉必达表达式 Java8提供了这种 实际上JDK
  • 加密授权验证学习之一 ——获取计算机CPUID序列号

    最近项目中需要对CPUID 硬盘序列号 网卡物理地址进行加密授权验证 网上这方面的资料代码很多 但很多都有错或者不能正确获取 通过整理与学习 将自己已经正确获得的代码分享出来吧 code include
  • 一篇文章带你搞懂Docker存储

    存储驱动 由storage driver管理的镜像层和可读写层 数据卷 概念 Data Volume本质上是Data Host文件系统中的文件或目录 能够被直接mount到容器的文件系统中 特点 1 Data Volume是目录或文件 而非
  • Unity3D中UGUI的RectTransform对齐方式详解

    https www jianshu com p 831e2dd7c546 https www jianshu com p 4592bf809c8b 在Unity自带的UGUI中 RectTransform扮演了极其重要的角色 可以说基本上所
  • Andriod HAXM device is not found 解决办法

    HAXM device is not found 提示条件下 无法打开仿真器 运行时会出现 启动AVD失败 重新安装HAXM可解决此问题 1 检查BIOS虚拟设置是否打开 一般都打开了 2 进入Android studio 点击右上角小齿轮
  • 均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)

    MSE Mean Squared Error 均方误差是指参数估计值与参数真值之差平方的期望值 MSE可以评价数据的变化程度 MSE的值越小 说明预测模型描述实验数据具有更好的精确度 RMSE 均方误差 均方根误差是均方误差的算术平方根 M
  • shiro 持久化到数据库

    https www cnblogs com youzhibing p 9749427 html
  • 算法(哈希表)——快乐数

    文章目录 1 题目描述 2 解题思路 3 代码实现 1 题目描述 编写一个算法来判断一个数 n 是不是快乐数 快乐数定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环
  • 解决WORD中图片随文字移动问题

    在WORD中插入或者粘贴进图片后 发现编辑图片上下行文字时 图片会随文字移动 如果想要图片不随文字移动 可以这样做 选中图片 查看布局选项 右键 gt 设置图片格式 gt 布局 可以看到文字环绕形式为 上下环绕 且选中了随文字移动选项 点击
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写测试用例时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计测试数据 通过介绍
  • MATLAB绘图/数据的可视化

    MATLAB绘图 数据的可视化 二维绘图 科研绘图模板 利用MATLAB直接对Excel数据绘图 三维绘图 MATLAB数据可视化是极重要的功能 文章介绍了MATLAB绘图与数据可视化的相关方法 阅读本文读者可以快速掌握MATLAB绘图技巧
  • 【Unity 3D】学习笔记(三)

    基本操作演练 下载 Fantasy Skybox FREE 构建自己的游戏场景 天空是任何游戏离不开的设定 而且要按季节与时间变化 是表示时间的重要工具 天空盒是一种材料 我们可以通过六面体构建一个天空盒 首先点击Asset上下文菜单 gt
  • shineblink APDS-9960传感器感应手势

    APDS 9960感应手势 一 本例程实现功能 二 传感器应用限制说明 三 接线图 五 完整代码 六 代码运行结果 一 本例程实现功能 通过APDS 9960传感器模块感应在传感器表面正上方的 上 下 左 右 手势动作 二 传感器应用限制说
  • 学习笔记(01):java美妆商城项目

    立即学习 https edu csdn net course play 23989 290220 utm source blogtoedu 第一节笔记 1 前端 jsp css javascript jQuery js框架 bootstra
  • SpringBoot+MyBatisPlus+thymeleaf增删改查

    SpringBoot MyBatisPlus thymeleaf增删改查 文章目录 SpringBoot MyBatisPlus thymeleaf增删改查 前言 作者简介 在校学生一枚 Java领域新星创作者 Java正在学习中 期待和大
  • 【Python习题集6】类与对象

    类与对象 一 实验内容 二 实验总结 一 实验内容 1 设计一个Circle类来表示圆 这个类包含圆的半径以及求面积和周长的函数 在使用这个类创建半径为1 10的圆 并计算出相应的面积和周长 半径为1的圆 面积 3 14 周长 6 28 半

随机推荐

  • SSH、shell、Xshell 、bash、Git、Git bash 、Git shell区别与联系

    SSH是安全外壳协议 为 Secure Shell 的缩写 SSH 为建立在应用层和传输层基础上的安全协议 专为远程登录会话和其他网络服务提供安全性的协议 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题 SSH工具 有一个软件叫
  • vscode 函数没有引入提示_VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)...

    在使用VSCODE进行C语言程序设计时 如果用到了头文件声明函数 c文件定义函数 在编译时尽管已经引用了相应的头文件 VSCODE文本编辑器也没有报错 但仍然无法编译 错误提示如下 d ComputerHomework 2019 winte
  • Java导入导出json

    1 导入依赖
  • 模式识别与操作符在CEP中的应用

    模式识别与操作符在CEP中的应用 随着大数据技术的快速发展 复杂事件处理 Complex Event Processing CEP 成为了处理实时流数据的重要工具 CEP通过对实时数据流进行高级模式识别和复杂操作符的运算 可以从海量数据中提
  • 微信小程序基础面试题【29道】

    这里写目录标题 1 请谈谈wxml与标准的html的异同 2 请谈谈WXSS和CSS的异同 3 请谈谈微信小程序主要目录和文件的作用 4 请谈谈小程序的双向绑定和vue的异同 5 简单描述下微信小程序的相关文件类型 6 微信小程序有哪些传值
  • 大数据毕设选题 - 疫情数据分析可视化系统(python flask 爬虫)

    文章目录 0 前言 1 课题背景 2 实现效果 2 1 整体界面展示 2 2 31省病例柱形图 2 3 全国现有确诊人数趋势 2 4 中国累计确诊时间线 2 5 中国疫情情况饼状图 2 6 高风险树状图 3 相关理论及技术 3 1爬虫 3
  • <VTK(0)> VTK8.2+VS2019环境配置

    VTK8 2 VS2019编译 最近用到VTK库 打算重新编译 发现能找到的资源中VTK库的编译比较详细 但是VS的环境配置比较乱 这里简述VTK的源码编译并提供VS环境配置的保姆教学 准备工作 1 安装VS2019 自查 Visual S
  • 阿里P7大牛整理!腾讯、阿里Android高级面试真题汇总,经典好文

    开头 相信大多数互联网的从业者都有着这样一个梦想 进大厂 获得丰厚的薪酬 和更优秀的人一起共事 在技术上获得更快的成长 然而部分人其实一直都陷入了 穷忙 的困局 觉得自己每天白天黑夜都在工作 高强度输出 但是却并没有获得机会的眷顾 久而久之
  • 生成随机颜色和随机数的生成

    1 随机颜色生成 方法1 var color parseInt Math random 0XFFFFFF toString 16 方法2 var color rgba parseInt Math random 256 parseInt Ma
  • [ZZ]【电子电路】上下拉电阻总结

    上下拉电阻总结 SkySeraph整理 2009 6 上拉电阻 1 当TTL电路驱动COMS电路时 如果TTL电路输出的高电平低于COMS电路的最低高电平 一般为3 5V 这时就需要在TTL的输出端接上拉电阻 以提高输出高电平的值 TTL
  • 基于yolov5交通标志识别(毕业设计)

    1 数据集 TT100K数据集 是由清华与腾讯的联合实验室整理并公布的 提供的10万张图像包含了30000个交通标志 图像来源于由6个像素很高的广角单反相机在中国的多个城市拍摄的腾讯街景全景图 拍摄地点的光照条件 天气条件有所不同 原始的街
  • 浅谈 forEach()

    用于遍历数组 无返回值 let arr 1 2 3 4 arr forEach function item index array array index item 2 console log arr 2 4 6 8 可以看到 forEac
  • 【C++入门】深拷贝和浅拷贝详解

    1 深拷贝和浅拷贝 1 当我们对复杂类型 结构体或者类 的对象进行初始化时 如果将同类型的对象A赋值给同类型的对象B 此时就涉及深拷贝和浅拷贝的问题 2 如何定义拷贝的深和浅 浅拷贝就是把类 结构体的变量原封不动的赋值 不考虑指针变量 深拷
  • 蓝桥杯-山(java)

    问题描述 这天小明正在学数数 他突然发现有些正整数的形状像一座 山 比如 123565321 145541 它们左右对称 回文 且数位上的数字先单调不减 后单调不增 小明数了很久也没有数完 他想让你告诉他在区间 2022 202222202
  • 调试osgEarth(六)earth文件如何解析成Config

    感谢 hankern 学习资料链接在https blog csdn net hankern article details 83933739 前面提到了创建插件osgDB earthd dll 和加载了该插件 就该读取和解析了 先看如何读取
  • java mysql连接两张表_java连接数据库对两张表进行查询对比的小项目

    下面是客户端的启动代码 public static void main String args throws UnknownHostException IOException TODO Auto generated method stub
  • sshd登录问题: pam_unix(sshd:session): session closed for user root

    报错 pam unix sshd session session closed for user root 工位上使用ssh无法root登录 其他账户也一样 1 踢账户 反复发作 who pkill kill t pts 1 who 2 期
  • Qt for iOS 应用使用自定义动态库 Framework

    转自 https www mycode net cn language cpp 2768 html 本文内容适合当你想使用 Qt 调用 xcode 开发的动态库 framework 做 iOS 应用的场景 文中涉及到原始动态库 framew
  • 牛客题库—软件测试(二)

    设计系统测试计划需要参考的项目文挡有哪些 答案 ACD A 软件测试计划 B 可行性研究报告 C 软件需求规范 D 迭代计划 软件需求 是软件开发之前做好的 软件开发是根据这个做的 那么软件测试自然也需要参考该文件 迭代计划 是软件的某个周
  • Netty简介及应用场景

    什么是Netty Netty 是一个基于 JAVA NIO 类库的异步通信框架 它的架构特点是 异步非阻塞 基于事件驱动 高性能 高可靠性和高可定制性 Netty是基于Java NIO client server的网络应用框架 使用Nett