1.Netty是什么?为什么要使用Netty?Netty典型应用场景?

目录


Netty专栏目录(点击进入…)


Reactor Netty是什么?

Netty是一个基于Java NIO(New I/O)的异步事件驱动网络应用框架。它提供了一个高度可定制的客户端和服务器端编程框架,用于构建各种网络应用,特别是网络服务器。Netty的设计目标是帮助开发者构建高性能、高可靠性和可维护性的网络应用。

Netty提供了一套抽象的、易于使用的API,简化了网络应用的开发过程。它在底层的事件驱动模型上构建了一个高级的抽象层,使得开发者可以专注于业务逻辑的开发,而无需关注底层网络的复杂性。

适用于微服务架构,Reactor Netty提供背压就绪网络引擎HTTP(包括网页套接字),TCP和UDP。

Reactor Netty在Java 8上面运行。
(1)Reactive Streams v1.0.3
(2)Reactor Core v3.x
(3)Netty v4.1.x


为什么要使用Netty?

使用 Netty 的原因主要归结于其高性能、灵活性和强大的网络处理能力,尤其在需要处理高并发、大量数据传输的场景中。

Netty被广泛应用于各种网络应用领域,包括服务器端的高性能网络通信、分布式系统的通信、游戏服务器、实时通信系统、物联网等。它是一个非常成熟和受欢迎的网络应用框架,被许多知名的开源项目和企业所采用和推荐。

(1)高性能(NIO、事件驱动)

非阻塞的 I/O (NIO):Netty 基于 Java NIO 实现,能够通过少量线程处理大量的连接。使用多路复用机制,Netty 能够在单个线程中管理多个连接,减少了对线程的过度创建和切换,提升了性能。

事件驱动架构:Netty 采用事件驱动模型,通过 ChannelHandler 处理 I/O 事件,高效地处理大量的网络请求。

(2)高并发

Netty 非常适合处理高并发场景,能够轻松支持上万甚至更多的并发连接。它通过使用少量的工作线程和事件循环(EventLoop)模型,高效处理大规模的连接和数据传输

(4)高扩展性

Netty 具有良好的扩展性,提供了丰富的钩子和扩展点。开发者可以通过实现自定义的 ChannelHandler 来扩展其功能,如处理业务逻辑、数据解析、异常处理等。

(5)内存优化

ByteBuf 内存管理:Netty 提供了高效的内存缓冲区管理方式(如: PooledByteBufAllocator),能够避免频繁的内存分配和垃圾回收,从而提升性能。它通过池化内存缓冲区的方式降低了垃圾回收的频率。

(6)丰富的协议支持

Netty 不仅支持基础的 TCP/UDP 协议,还支持常见的高层协议如 HTTP、WebSocket、SSL/TLS 等,甚至可以定制自己的协议。这使得 Netty 能够适应各种不同的应用场景。

(7)简单易用的 API

Netty 提供了高度抽象的 API,简化了复杂的网络编程任务。开发者无需深入理解底层的 Java NIO 操作,使用 Netty 的 API 即可轻松构建高性能的网络应用。

(8)安全性

Netty提供了强大的安全性支持,包括SSL/TLS和加密解密等功能,可以保护网络通信的安全性和机密性。

(9)成熟和稳定

Netty 是一个经过长时间打磨的网络框架,已经被大量大型项目和高流量场景验证过的稳定性和可靠性。很多知名企业和开源项目(如 Hadoop、Elasticsearch、Kafka)都在使用 Netty 作为网络通信的基础。

(10)跨平台

Netty 基于 Java 构建,具有跨平台特性,能够在各种操作系统(如 Windows、Linux、MacOS)上运行,极大地增强了其通用性。


Netty典型应用场景

(1)高并发服务器

如:即时通讯系统、在线游戏服务器、消息推送系统等。

(2)代理服务器

反向代理、负载均衡等。

(3)数据传输服务

大数据集群中的数据传输模块,如 Kafka 和 Hadoop 中的网络通信模块。

总体来说,Netty 由于其性能、灵活性以及强大的协议支持,使得它成为构建高并发、高性能网络应用的首选框架。


BOM和版本控制

Reactor Netty是Project Reactor BOM(自Aluminium发布系列以来)的一部分。这个策划列表将旨在很好地协同工作的工件分组,尽管这些工件中可能存在不同的版本控制方案,但仍提供相关版本。

工程遵循版本控制方案:MAJOR.MINOR.PATCH-QUALIFIER,而BOM使用CalVer启发的方案进行版本控制:YYYY.MINOR.PATCH-QUALIFIER ==> 2020.0.14

版本标识描述
YYYY给定发布周期中第一个GA(正式发)发布的年份(例如 1.0.0 代表 1.0.x)
MAJOR一个从0开始的数字,随着每个新的发布周期递增。代表当前一代的Reactor,每一代都会给项目的结构带来根本性的变化(重要迁移)
①:在项目的情况下,它通常反映更广泛的变化,可以表明适度的迁移工作
②:在BOM的情况下,允许区分发布周期,以防两个在同一年首次发布
PATCH是一个从0开始的数字,随着每个服务版本递增
-QUALIFIER是一个文本限定符,在GA版本的情况下被省略()
-M1 ~ -M9里程碑(预计每个服务版本不超过9个)
-RC1 ~ -RC9候选版本(预计每个服务版本不会超过9个)
-SNAPSHOT快照

版本描述

(1)Beta:测试版本
(2)GA(General Availability):正式发布的版本

BOM版本管理

BOM总结:在项目顶层的POM文件中,可以看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号

dependencyManagement里只是声明依赖,并不实现引入;因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

历史版本说明:
在BOM使用版本序列方案进行版本控制,代号后跟限定符,并且限定符略有不同。
Aluminium-RELEASE(第一个GA版本,现在类似 YYYY.0.0)
Bismuth-M1、Californium-SR1(服务版本现在类似于 YYYY.0.1)
Dysprosium-RC1、Dysprosium-BUILD-SNAPSHOT(在每个补丁之后,会回到相同的快照版本。类似于现在的YYYY.0.X-SNAPSHOT,所以每个补丁获得1个快照)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值