Netty核心技术四--Netty概述

news2024/11/14 20:27:57

1. 原生NIO存在的问题

  1. NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。
  2. 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序。
  3. 开发工作量和难度都非常大:例如客户端面临断连重连网络闪断半包读写失败缓存网络拥塞异常流的处理等等。
  4. JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,**它会导致Selector 空轮询,最终导致 CPU 100%。**直到 JDK 1.7 版本该问题仍旧存在,没有被根本解决。

2. Netty官网说明

Netty官网

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers &clients

img

  • Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络IO程序
  • Netty 可以帮助你快速、简单的开发出一个网络应用,相当于简化和流程化了NIO的开发过程
  • Netty 是目前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,知名的Elasticsearch 、Dubbo框架内部都采用了 Netty。

3. Netty的优点

Netty 对 JDK 自带的 NIO 的 API 进行了封装,解决了上述问题。

  1. 设计优雅:适用于各种传输类型的统一 API 阻塞和非阻塞Socket;基于灵活且可扩展的事件模型,可以清晰地分离关注点;高度可定制的线程模型- 单线程,一个或多个线程池.
  2. 使用方便:详细记录的 Javadoc,用户指南和示例;没有其他依赖项,JDK5(Netty3.x)或 6(Netty 4.x)就足够了。
  3. 高性能、吞吐量更高:延迟更低;减少资源消耗;最小化不必要的内存复制。
  4. 安全:完整的 SSL/TLS 和 StartTLS 支持。
  5. 社区活跃、不断更新:社区活跃,版本迭代周期短,发现的Bug 可以被及时修复,同时,更多的新功能会被加入

4. Netty版本说明

  1. netty版本分为 netty3.x 和 netty4.x、netty5.x
  2. 因为Netty5出现重大bug,已经被官网废弃了,目前推荐使用的是Netty4.x的稳定版本
  3. 目前在官网可下载的版本 netty3.x netty4.0.x 和netty4.1.x
  4. netty 下载地址: https://bintray.com/netty/downloads/netty/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/658812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从tomcat说起全面理解Java web开发原理

从tomcat说起全面理解Java web开发原理 简介:Java开发分为Java ME,Java SE,Java EE。回顾过去这些的开发工作基本上都是围绕着Java EE的,在开发经历中分别经历了Java EE开发框架从jsp servlet一路经历了ssh, ss…

存储笔记8 ipsan

Module Objectives IP SAN的组件 IP SAN的好处 描述SAN中的IP融合及其影响 描述的基本架构 –iSCSI –FCIP –FCoE 讨论IP SAN技术的市场驱动因素 列出IP SAN技术 列出iSCSI的组件和连接选项 描述iSCSI体系结构和拓扑结构 解释iSNS操作 描述FCIP的体系结构 IP SAN互联…

Springboot整合第三方登录

文章目录 Springboot整合第三方登录为什么采用第三方登录整合第三方登录创建应用导入依赖创建controller类 Springboot整合第三方登录 为什么采用第三方登录 ​ 采用第三方登录可以避免重新注册账号的繁琐,也不需要再为密码和昵称发愁,而第三方登录有一…

Linux命令——top相关之Load Average平均负载

Linux 平均负载 Load Average 详解_系统1f分钟负载_欧晨eli的博客-CSDN博客 一、什么是Load Average? 系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度)。…

2-JVM运行流程

JVM 是 Java 运行的基础,也是实现一次编译到处执行的关键,那么 JVM 是如何执行的呢? 程序在执行之前先要把java源代码(.java)转换成字节码文件(.class)。JVM 首先需要通过一定的方式类加载器&a…

如何做好前端性能优化

前端推荐官网: http://luckycola.com.cn/ 前言: 前端性能优化一直是一个前端开发人员必须关注的经典话题,虽然现在随着技术的不断发展,网页容器(浏览器、webview)性能也越来越强大,但是网站应用的功能也不断丰富,体积不可避免的增加,当网络环境等因素不好时,仍然会存在白屏时…

【后端面经】MySQL主键、唯一索引、联合索引的区别和作用

【后端面经】MySQL主键、唯一索引、联合索引的区别和作用 0. 简介1. 主键2. 唯一索引3. 联合索引4. 索引对数据库操作的影响5. 其他索引5.1 普通索引5.2 全文索引5.3 前缀索引 6. 总结7. 参考资料 0. 简介 索引是一类特殊的文件,用来存储检索信息,使数据…

数值天气预报期末复习

数值天气预报期末复习 文章目录 数值天气预报期末复习(零)重点需要掌握知识点(一)什么是数值天气预报(二)数值模式的分类(三)各坐标系下的大气运动方程组3.1 局地直角坐标系3.2 球坐…

绩效跃升地图读书笔记20130618

绩效跃升地图,从5月份开始看,每天中午吃完饭休息的时候,坐在工位上,把看手机刷视频看八卦的时间,换成看书的时间,直到6月15日看完一本书。发现其实利用好碎片时间,还是可以读不少书的。 “绩效…

网络端口地址转换 NAPT 配置

你是某公司的网络管理员,公司办公网需要接入互联网,公司只向 ISP 申请了一条专线,该专线分配了一个公司 IP 地址,配置实现全公司的主机都能访问外网。 技术原理 NAT 将网络划分为内部网络和外部网络两部分,局域网主机…

Java集合详解

目录 友情提醒第一章、集合体系概述1.1)集合是什么?与数组的区别在哪1.2)集合体系与分类 第二章、集合体系中的Collection和List接口/Set接口2.0)List接口/Set接口两者区别2.1)Collection接口中的常用方法2.2&#xff…

【系统开发】尚硅谷 - 谷粒商城项目笔记(一):项目准备工作

文章目录 项目准备工作人人开源搭建后台管理系统数据库搭建前端项目搭建后端模块代码生成 项目准备工作 人人开源搭建后台管理系统 码云搜索人人开源 renren-fast-vue:前端 renren-generator:代码生成器 renren-fast:后台管理系统 用git…

系统设计蓝图:终极指南

系统设计蓝图:终极指南 设计开发一个健壮的、可扩展的、高效的系统可以是令人望而生畏. 但是,了解关键概念和组件可以使流程更易于管理。在这篇博文中,我们将探索基本的系统设计组件,例如 DNS、负载平衡、API 网关等,以…

python详解(7)——进阶(1):排序算法

目录 🏆一、前言 🏆二、什么是算法(简单) 🚩1、算法 🚩2、排序算法 🏆三、冒泡排序(中等) 🏆四、快速排序(困难) 🏆五&…

Android Studio 提高SDK下载速度

我们在下载Android SDK的时候,经常会出现下载失败的情况, 报android sdk manager not installing components之类的错误。 要如何加快SDK的下载速度呢 ? 我们可以通过修改Host来实现 关闭Android Studio的代理 首先,我们要关闭Android Stu…

华为HCIA备考 易错题整理 PART1

1.IEEE802.1Q定义的 VLAN 帧格式中VLAN ID总共有多少bit 答:12 2.NAPT允许多个私有IP地址通过不同的端口号映射到同一个公有IP地址上,且不需要做任何关于端口号的配置。 3.IEEE802.1Q定义的VLAN帧总长度为多少字节? 答:4 4.关于…

10种实用的Prompt技巧图解

收集整理了prompt engineering的10种实用技巧,以图解的方式解释了它们的主要原理。 本文追求以极简风格逼近这些方法的第一性原理,把黑话翻译成人话,并使用图片范例进行说明。 同时也加入了一些自己的理解,如有出入欢迎指正。 一&…

掌握Python的X篇_3_Python的两种编程方式:交互式与脚本式

掌握Python的X篇_3_Python的两种编程方式:交互式与脚本式 1. 交互式编程2. 脚本式编程3. 其他补充3.1 python源码文件后缀的问题3.2 关于原生工县和开发工具的选择 Python有两种编程方式: 交互式编程:写一行python语句,马上运行一行&#xf…

15-1.创建与引用自定义组件

目录 1 创建自定义组件 2 引用自定义组件 2.1 局部引用 2.2 全局引用 3 自定义组件的样式 1 创建自定义组件 在项目根目录下创建components,然后在components中创建 自定义组件名称 的文件夹,然后再自定义组件名称的文件夹中点击 新建Compon…

人体姿态估计技术的理解(Human Pose Estimination)

本人毕设题目是人体姿态估计技术的相关课题,本人按照自己对人体姿态估计技术的学习和理解进行论述,如有不足,请大家指正!!! 首先讨论一个问题:什么是姿态估计? “姿势估计?……姿势这个词对…