作为架构师必须知道的Netty原理和使用

本文介绍了Netty的基础知识,包括Netty与其他网络通信框架的对比,如Mina和Grizzly。Netty广泛应用于互联网、游戏、大数据和企业软件等领域。Netty的核心组件包括Channel、ChannelFuture、EventLoop、ChannelHandler和ChannelPipeline,它们共同构成了Netty的高效通信机制。Netty的异步非阻塞特性使其成为高性能网络应用的首选框架。
摘要由CSDN通过智能技术生成

原创申明:本文由公众号【猿灯塔】原创,转载请说明出处标注
今天呢!灯塔君跟大家讲:

Netty应用

1.Netty简介

1、Netty下载
官网:https://netty.io/downloads.html
在这里插入图片描述

2.简介

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

是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端 


Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server. 'Quick and easy' doesn't mean that a resulting application will suffer from a maintainability or a performance issue. Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and various binary and text-based legacy protocols. As a result, Netty has succeeded to find a way to achieve ease of development, performance, stability, and flexibility without a compromise.



Netty是一个NIO客户端服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端。

它极大地简化和简化了网络编程,例如TCP和UDP套接字服务器。“快速简便”并不意味着最终的应用 程序将遭受可维护性或性能问题的困扰。Netty经过精心设计,结合了许多协议(例如FTP,SMTP, HTTP以及各种基于二进制和文本的旧式协议)的实施经验。结果,Netty成功地找到了一种无需妥协即 可轻松实现开发,性能,稳定性和灵活性的方法。 

Features
Design 设计 
Unified API for various transport types - blocking and non-blocking socket 
Based on a flexible and extensible event model which allows clear separation of concerns Highly customizable thread model - single thread, one or more thread 
pools such as SEDA True connectionless datagram socket support (since 3.1)
Ease of use 使用方便 
Well-documented Javadoc, user guide and examples 
No additional dependencies, JDK 5 (Netty 3.x) or 6 (Netty 4.x) is enough 
Note: Some components such as HTTP/2 might have more requirements. 
Please refer to the Requirements page for more information. 
Performance 性能 
Better throughput, lower latency 
Less resource consumption 
Minimized unnecessary memory copy 
Security 安全 
Complete SSL/TLS and StartTLS support 
Community 社区 
Release early, release often 
The author has been writing similar frameworks since 2003 and he still 
findsyourfeed back precious! 

3、常用网络通信框架

a、Min

Mina出身于开源界的大牛Apache组织。是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提 供了非常便利的框架。当前发行的 Mina 版本2.04支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程 序,Mina 所支持的功能也在进一步的扩展中。目前,正在使用Mina的应用包 括:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、 Openfire等等

b、Netty

Netty是一款异步的事件驱动的网络应用框架和工具,用于快速开发可维护的高性能、高扩展性协议服务器和
客户端。也就是说,Netty是一个NIO客户端/服务器框架,支持快速、简单地开发网络应用,如协议服务器和
客户端。它极大简化了网络编程,如TCP和UDP套接字服务器

c、Grizzly

Grizzly是一种应用程序框架,专门解决编写成千上万用户访问服务器时候产生的各种问题。使用JAVA NIO
作为基础,并隐藏其编程的复杂性。容易使用的高性能的API。带来非阻塞socketd到协议处理层。利用高性
能的缓冲和缓冲管理使用高性能的线程池。从设计的理念上来看,Mina的设计理念是最为优雅的。当然,由于
Netty的主导作者与Mina的主导作者是同一人,出自同一人之手的Netty在设计理念上与Mina基本上是一致
的。而Grizzly在设计理念上就较差了点,几乎是JavaNIO的简单封装。

4、使用领域

a、互联网行业

阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty
作为基础通信组件,用于实现各进程节点之间的内部通信。除了 Dubbo 之外,淘宝的消息中间 件 RocketMQ
的消息生产者和消息消费者之间,也采用 Netty 进行高性能、异步通信。
除了阿里系和淘宝系之外,很多其它的大型互联网公司或者电商内部也已经大量使用 Netty 构建高性 能、分布式的网络服务器

b、游戏行业

无论是手游服务端、还是大型的网络游戏,Java 语言得到了越来越广泛的应用。Netty 作为高性能的基 础通信组件,它本身提供了
TCP/UDP 和 HTTP 协议栈,非常方便定制和开发私有协议栈。账号登陆服 务器 、地图服务器之间可以方便的通过 Netty
进行高性能的通信

c、大数据领域

经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它 的 Netty
Service 基于 Netty 框架二次封装实现。大数据计算往往采用多个计算节点和一个/N个汇总节
点进行分布式部署,各节点之间存在海量的数据交换。由于 Netty 的综合性能是目前各个成熟 NIO
框架中最高的,因此,往往会被选中用作大数据各节点间的通信。

d、企业软件

企业和 IT 集成需要 ESB,Netty 对多协议支持、私有协议定制的简洁性和高性能是 ESB RPC 框架的首
选通信组件。事实上,很多企业总线厂商会选择 Netty 作为基础通信组件,用于企业的 IT 集成。

e、通信行业

Netty 的异步高性能、高可靠性和高成熟度的优点,使它在通信行业得到了大量的应用。

2.Netty核心组件

1、Channel

Channel 是 Netty 网络操作抽象类,它除了包括基本的 I/O 操作,如 bind、connect、read、write 之
外,还包括了 Netty 框架相关的一些功能,如获取该 Channe l的 EventLoop。 在传统的网络编程中,作为核心类的
Socket ,它对程序员来说并不是那么友好,直接使用其成本还是 稍微高了点。而Netty 的 Channel 则提供的一系列的 API
,它大大降低了直接与 Socket 进行操作的复 杂性。而相对于原生 NIO 的 Channel,Netty 的 Channel
具有如下优势(摘自《Netty权威指南(第二 版)》): 在 Channel 接口层,采用 Facade 模式进行统一封装,将网络 I/O
操作、网络 I/O 相关联的其他操作封 装起来,统一对外提供。 Channel 接口的定义尽量大而全,SocketChannel 和
ServerSocketChannel 提供统一的视图,由不
同子类实现不同的功能,公共功能在抽象父类中实现,最大程度地实现功能和接口的重用。 具体实现采用聚合而非包含的方式,将相关的功能类聚合在
Channel 中,有 Channel 统一负责和调 度,功能实现更加灵活。

2、ChannelFuture

Netty 为异步非阻塞,即所有的 I/O 操作都为异步的,因此,我们不能立刻得知消息是否已经被处理了。 Netty 提供了
ChannelFuture 接口,通过该接口的 addListener() 方法注册一个
ChannelFutureListener,当操作执行成功或者失败时,监听就会自动触发返回结果

3、EventLoop

Netty 为异步非阻塞,即所有的 I/O 操作都为异步的,因此,我们不能立刻得知消息是否已经被处理了。 Netty 提供了
ChannelFuture 接口,通过该接口的 addListener() 方法注册一个
ChannelFutureListener,当操作执行成功或者失败时,监听就会自动触发返回结果。 Netty
基于事件驱动模型,使用不同的事件来通知我们状态的改变或者操作状态的改变。它定义了在整个连
接的生命周期里当有事件发生的时候处理的核心抽象。Channel 为Netty 网络操作抽象类,EventLoop 主 要是为Channel
处理 I/O 操作,两者配合参与 I/O 操作。
下图是Channel、EventLoop、Thread、EventLoopGroup之间的关系(摘自《Netty In

Action》):
在这里插入图片描述
一个 EventLoopGroup 包含一个或多个EventLoop。
一个 EventLoop 在它的生命周期内只能与一个Thread绑定。
所有EnventLoop 处理的 I/O 事件都将在它专有的 Thread 上被处理。
一个 Channel 在它的生命周期内只能注册与一个 EventLoop。
一个 EventLoop 可被分配至一个或多个 Channel 。
当一个连接到达时,Netty 就会注册一个 Channel,然后从 EventLoopGroup 中分配一个 EventLoop
绑定到 这个Channel上,在该Channel的整个生命周期中都是有这个绑定的 EventLoop 来服务的。

4、ChannelHandler

ChannelHandler 为 Netty 中最核心的组件,它充当了所有处理入站和出站数据的应用程序逻辑的容器。
ChannelHandler 主要用来处理各种事件,这里的事件很广泛,比如可以是连接、数据接收、异常、数据转换等。
ChannelHandler 有两个核心子类 ChannelInboundHandler 和
ChannelOutboundHandler,其中 ChannelInboundHandler
用于接收、处理入站数据和事件,ChannelOutboundHandler 则相反。

5、ChannelPipeline

ChannelPipeline 为 ChannelHandler 链提供了一个容器并定义了用于沿着链传播入站和出站事件流的
API。一个数据或者事件可能会被多个 Handler 处理,在这个过程中,数据或者事件经流 ChannelPipeline,由
ChannelHandler 处理。在这个处理过程中,一个 ChannelHandler 接收数据 后处理完成后交给下一个
ChannelHandler,或者什么都不做直接交给下一个 ChannelHandler。

6、Channel的生命周期

ChannelUnregistered Channel已经被创建,但是还未注册到EventLoop; ChannelRegistered
Channel已经被注册到EventLoop; ChannelActive Ch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值